gpt4 book ai didi

c++模板重载方法依赖于类类型

转载 作者:行者123 更新时间:2023-11-27 22:32:33 25 4
gpt4 key购买 nike

我有这样的类(class):

template<typename T>
MyClass{
//myFunc();
}

我想创建 myFunc 方法,如果类模板为数字,则该方法返回数值,如果类模板不是数字,则不返回任何内容(void)。

现在,我得到了这样的东西:

template<typename T>
MyClass{
template <typename returnT>
returnT myFunc();
}


template <typename T>
template <typename returnT>
typename std::enable_if<std::is_arithmetic<T>::value>
T MyClass<T>::myFunc()
{
return T::value;
}

template <typename T>
template <typename returnT>
typename std::enable_if<!std::is_arithmetic<T>::value>
void MyClass::myFunc()
{
//do sth
}

当然,那是行不通的。以这种方式解决这个问题是个好主意吗?什么是“智能”且有效的解决方案?

最佳答案

作为已提供的 constexpr if 解决方案的替代方案,这是您的初步想法的工作形式。

#include <type_traits>
#include <iostream>

template<typename T>
struct MyClass{
template <typename returnT = T, std::enable_if_t<std::is_arithmetic_v<returnT>, bool> = true>
T myFunc();

template <typename returnT = T, std::enable_if_t<!std::is_arithmetic_v<returnT>, bool> = true>
void myFunc();
};


template <typename T>
template <typename returnT, std::enable_if_t<std::is_arithmetic_v<returnT>, bool>>
T MyClass<T>::myFunc()
{
std::cout << "yo\n";
return T{};
}

template <typename T>
template <typename returnT, std::enable_if_t<!std::is_arithmetic_v<returnT>, bool>>
void MyClass<T>::myFunc()
{
std::cout << "yay\n";
}

int main() {
MyClass<int> m;
MyClass<std::string> n;
m.myFunc();
n.myFunc();
}

关于c++模板重载方法依赖于类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59179396/

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