我正在尝试编写一个函数,它为所有非枚举类型实现通用行为,为所有枚举类型实现通用行为,然后能够通过完全专门化该函数来专门化某些类型的特定行为。到目前为止,我的代码如下:
// Func.h
#include <cstdio>
#include <type_traits>
template <typename T, std::enable_if_t<!std::is_enum<T>{}>* = nullptr >
void Func()
{
printf("General case\n");
}
template <typename T, std::enable_if_t<std::is_enum<T>{}>* = nullptr >
void Func()
{
printf("enum\n");
}
template <>
void Func<bool>()
{
printf("bool\n");
}
// main.cpp
#include <Func.h>
enum Enum
{
A,
B
};
int main()
{
Func<float>();
Func<Enum>();
Func<bool>();
}它不能编译,我真的不知道如何正确地处理它。如果我让专门化的原型像上面的代码一样,我会得到这个链接错误:
error LNK2005: "void __cdecl Func<bool,0>(void)" (??$Func@_N$0A@@@YAXXZ) already defined in main.obj如果我制作专门的原型template<> void Func<bool, nullptr>(),我会得到这个编译错误:
error C2912: explicit specialization 'void Func<bool,nullptr>(void)' is not a specialization of a function template这些测试是使用具有c++14标准的Visual Studio 2015编译器完成的
我不知道接下来该怎么做,任何帮助都将不胜感激
https://stackoverflow.com/questions/61438535
复制相似问题