gpt4 book ai didi

c++ - 模板参数的默认参数可以专门化吗?

转载 作者:可可西里 更新时间:2023-11-01 18:29:42 24 4
gpt4 key购买 nike

在 C++ 中,如果我有一个模板参数,我怎样才能干净地特化一个默认参数?例如,请考虑以下内容:

template <class Key, class Value = int > class Association;

如果我希望 ValueSpecial 类默认为 float 怎么办?有没有一种方法可以有效地专门化 Association 类,这样如果 Key 是 Special,那么 Value 默认为 float

我想这样做的一种方法是使用特征:

template <class Key> struct Traits {
typedef int defaultValue;
}
template<> struct Traits<Special> {
typedef float defaultValue;
}
template <class Key, class Value = Traits<Key>::defaultValue> class Association;

是否有更简洁的方法来做到这一点,它不那么复杂并且更容易表明 int 是定义 Association 的地方的正常默认值?

最佳答案

好吧,一个不一定漂亮的单行:

#include <type_traits>

template <typename Key,
typename Value = typename std::conditional<std::is_same<Key, Special>::value, float, int>::type>
class Association { /* ... */ };

关于c++ - 模板参数的默认参数可以专门化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10755908/

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