以下代码生成
“错误:类型''和'const size_t'的无效操作数到二进制'运算符
我只想要一个查找函数来获取不同类型的默认值 . 这应该适用吗?
#include
#include
#include
// IDs
enum class ID : size_t
{
AAA, // 0
BBB, // 1
CCC, // 2
DDD // 3
};
// default values for each ID
const auto defaultValsForIDs = std::make_tuple(
int(1), // 0
std::string("bbb"), // 1
double(3.5), // 2
int(-5) // 3
);
//------------------------------------------------------
// HERE IS WHERE IT GETS MESSY:
//------------------------------------------------------
// default values for each deviceID
template
using underlayingEnumT = typename std::underlying_type::type;
template
constexpr underlayingEnumT to_underlying(EnumT e)
{
return static_cast>(e);
}
template
auto getDefaultValue(const EnumT e)
-> decltype(std::get(e)>(defaultValsForIDs)) //
{
return std::get(e)>(defaultValsForIDs);
}
//------------------------------------------------------
// THIS DOES NOT COMPILE AS WELL
//------------------------------------------------------
template<>
auto getDefaultValue(const size_t xx)
-> decltype(std::get(defaultValsForIDs)) //
{
return std::get(defaultValsForIDs);
}
int main(int , char** )
{
std::cout << getDefaultValue(ID::AAA) << std::endl;
return 0;
}
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
按照Piotr的建议编辑:
改变:
template
auto getDefaultValue()
-> decltype(std::get(e)>(defaultValsForIDs))
{
return std::get(e)>(defaultValsForIDs);
}
并为ID添加了实例:
template
auto getDefaultValForID()
-> decltype(getDefaultValue())
{
return getDefaultValue();
}
然后:
int main()
{
std::cout << getDefaultValForID<:bbb>() << std::endl;
return 0;
}
奇迹般有效 .