gpt4 book ai didi

c++ - enable_if 函数在不应该定义的时候定义

转载 作者:行者123 更新时间:2023-11-30 00:57:11 25 4
gpt4 key购买 nike

作为一个实验,我试图使一个没有参数的 void 成员函数根据类模板参数改变行为:

#include <iostream>
#include <limits>

template<typename T>
class MyClass
{
public:
void MyFunc(const typename std::enable_if<std::is_fundamental<T>::value, T> dummy = T());
void MyFunc(const typename std::enable_if<!std::is_fundamental<T>::value, T> dummy = T());

};

template<typename T>
void MyClass<T>::MyFunc(const typename std::enable_if<std::is_fundamental<T>::value, T> dummy)
{
}

template<typename T>
void MyClass<T>::MyFunc(const typename std::enable_if<!std::is_fundamental<T>::value, T> dummy)
{
}

class Simple {};

int main(int argc, char *argv[])
{
MyClass<int> myClass;
myClass.MyFunc();

// MyClass<Simple> myClass2;
// myClass2.MyFunc();

return 0;
}

但是,我收到:错误:重载“MyFunc()”的调用不明确。不应该只定义这些函数中的一个或另一个,因为除了 !在其中之一?

最佳答案

不,首先你需要实际访问 ::type enable_if 的类型定义,其次,您的代码将无法工作,因为您的成员不是模板。其中之一总是以无效声明告终。

应用必要的 ::type 后修复,你的代码在实例化时会失败 MyClass<int> ,早在您尝试调用该成员(member)之前。

制作您的成员(member)成员(member)模板,并制作enable_if取决于成员模板的参数,而不是封闭类模板的参数。

关于c++ - enable_if 函数在不应该定义的时候定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com