gpt4 book ai didi

c++ - 具有模板特化的标签分发

转载 作者:行者123 更新时间:2023-11-30 03:18:43 28 4
gpt4 key购买 nike

派发专用标签是否有效?下面的代码可以编译运行,没有任何错误。但我还是想确认这样做是否有效。

template <typename T, typename = void>
struct tag {};

// Specialize the tag
template <typename T>
struct tag<T, typename std::enable_if<std::is_arithmetic<T>::value>::type> {};

template <typename T>
T func(int i) {
return real_func(tag<T>(), i);
}

string real_func(tag<string>, int i) {
return to_string(i);
}

template <typename T>
T real_func(tag<T, // <--------- Is this valid?
typename std::enable_if<std::is_arithmetic<T>::value>::type>,
int i) {
return static_cast<T>(i);
}

请问还有其他方法可以达到同样的目的吗?

最佳答案

您的专用标签没有任何用处。您以一种奇怪的方式使用 SFINAE,只需执行以下操作:

template <typename T> struct tag{};

std::string real_func(tag<std::string>, int i) {
return to_string(i);
}

template <typename T, typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
T real_func(tag<T>, int i) {
return static_cast<T>(i);
}

template <typename T>
T func(int i) {
return real_func(tag<T>(), i);
}

关于c++ - 具有模板特化的标签分发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54424788/

28 4 0
文章推荐: java - 如何检测 ondraglistener 是否已经完成? (安卓)
文章推荐: java - 如何在 Iterator 中存储对象?