【发布时间】:2019-01-15 09:01:28
【问题描述】:
我试图理解为什么这段代码无法编译:
// test.h
struct Base
{
virtual ~Base{};
virtual void execute() {}
virtual void execute(int) {}
virtual void execute(double) {}
}
template<class T>
struct Test : Base
{
void execute(typename std::enable_if<std::is_void<T>::value, void>::type)
{
// Do A
}
void execute(typename std::enable_if<!std::is_void<T>::value, int>::type t)
{
// Do B
}
};
// main.cpp
Test<void> t;
我得到一个编译器错误:“no type named type”。
即使我用
修改了 A 版本的代码,同样的错误std::enable_if<std::is_void<T>::value>
目标是创建一个类,该类根据参数 T 创建不同的函数成员。在这种情况下 2,但我也会对更多感兴趣。
[编辑] 我已经添加了我在 cmets 中谈论的继承部分。
【问题讨论】:
-
问题已编辑@DanielLangr
-
请不要以使现有答案不正确或不完整的方式编辑问题。有关此类的更多详细信息,请打开第二个后续问题,该问题可以链接到第一个问题。 (但保留这个原样,现在两个版本都有答案。)
-
好的,完全有道理。谢谢你的建议
-
很难选择最佳答案,谢谢大家,抱歉编辑
标签: c++ c++11 templates template-meta-programming enable-if