【发布时间】:2021-01-07 19:04:48
【问题描述】:
模板新手在这里。我正在试验以下代码:
#include <type_traits>
enum class Thread
{
MAIN, HELPER
};
template<typename T>
int f()
{
static_assert(std::is_same_v<T, Thread::MAIN>);
return 3;
}
int main()
{
f<Thread::MAIN>();
}
换句话说,如果没有从主线程调用该函数,我想提出一个编译时断言。显然编译器不接受枚举器作为模板参数,大喊invalid explicitly-specified argument for template parameter 'T'。
我知道我可以使用两个结构作为标签:struct ThreadMain 和 struct ThreadHelper。不幸的是,枚举 cass 已经在我的项目中随处使用,我希望避免重复。为此,我如何重用现有的枚举类?
【问题讨论】:
-
您的模板采用 type。
std::is_same_v比较类型。Thread是一个类型。但是Thread::MAIN和Thread::HELPER不是类型,它们是Thread类型的值。
标签: c++ templates generic-programming