使用 std::enable_if 限制派生类的模板参数时出现编译错误
Compilation error when restricting template parameters of derived class with std::enable_if
编译:
template<typename T, class T2, class = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
class ENABLE{
public:
T a;
ENABLE(T b): a(b) {};
};
template<typename T, class T2>
class ENABLE_CHILD : public ENABLE<T, T2> {
public:
ENABLE_CHILD(T x): ENABLE<T, T>(x) {};
bool FOO(auto a);
};
template<typename T, class T2>
bool ENABLE_CHILD<T, T2>::FOO(auto a) { return(1); };
但这不会:
template<typename T, class T2, class = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
class ENABLE{
public:
T a;
ENABLE(T b): a(b) {};
};
template<typename T, class T2, class = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
class ENABLE_CHILD : public ENABLE<T, T2> {
public:
ENABLE_CHILD(T x): ENABLE<T, T>(x) {};
bool FOO(auto a);
};
template<typename T, class T2>
bool ENABLE_CHILD<T, T2>::FOO(auto a) { return(1); };
错误消息:
- 错误:未使用不完整的类型"类 ENABLE_CHILD<T、T2>"无效
- 注意:声明"类ENABLE_CHILD<T,T2>(单击此声明将我带到声明声明(
所以我的编译器认为该类不完整。关于如何解决这个问题的任何想法?提前谢谢。
将此代码粘贴到 godbolt.org 时出现不同的错误。您还需要在成员函数定义中包含第三个模板参数:https://godbolt.org/z/kxpvQt
模板<类型名称>bool ENABLE_CHILD<T,>::FOO(auto a( { return(1(; };类型名称>
我不知道你是否想到了别的东西 T 不应该是算术类型,但我用 static_asserts 替换了enable_ifs,代码编译得很好。 https://godbolt.org/z/y4f6wa
#include <type_traits>
template<typename T, class T2>
class ENABLE{
static_assert(std::is_arithmetic<T>::value);
public:
T a;
ENABLE(T b): a(b) {};
};
template<typename T, class T2>
class ENABLE_CHILD : public ENABLE<T, T2> {
static_assert(std::is_arithmetic<T>::value);
public:
ENABLE_CHILD(T x): ENABLE<T, T>(x) {};
bool FOO(auto a);
};
template<typename T, class T2>
bool ENABLE_CHILD<T, T2>::FOO(auto a) { return(1); };
int main(){
ENABLE_CHILD<int,int> theEC(42);
}
相关文章:
- C++声明模板参数阴影模板参数错误
- 为什么 CRTP 模板C++给出无效参数错误?
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 参数错误可能与类型不匹配有关?
- printf 和 strftime 的参数错误无效
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 如何修复"没有重载函数需要 2 个参数"错误C++
- 术语不计算为函数采用 1 个参数错误?
- 从带有 getline() 的文件读入一行上有多个信息得到无效参数错误
- 为什么我不能像使用 std::string::size_type 那样使用 QList::size_type?(模板参数错误)
- cudaFreeHost() 无效参数错误
- 精神语法不会编译:函数模板参数错误?
- C 功能具有参考参数错误的迭代器错误.寻求解释
- 使用getDefaultCommConfig使用无效的参数错误
- C++ 可变参数模板和模板模板参数:错误:模板参数列表中参数 1 处的类型/值不匹配
- 使用SWIG生成的Python库时,向量分配器参数错误
- 错误C2664:无法转换参数错误
- C 作为参数错误的功能
- 命令行参数错误
- 增强Python参数错误