如何决定模板参数的类型(即编译时的三元运算符)?

问题描述 投票:0回答:1

我想要一些简单、轻便的解决方案来解决这种语法:

template <bool is_true>
class A {
    B<is_true ? int : float> var;  // B is just some other templated class
};

而且我想要那种东西(虽然,它看起来很正常,我只是希望一切看起来都是需要的,而不是创建一次性结构并声明它们的专业化):

template <bool>
struct HelperClass {
    using type = void;
};

template <>
struct HelperClass<true> {
    using type = int;
};

template <>
struct HelperClass<false> {
    using type = float;
};

// 'HelperClass<is_true>::type' instead of ternary operator
c++ conditional-operator class-template
1个回答
4
投票

惯用的解决方案是使用

std::conditional
:

template <bool is_true>
class A {
    B<std::conditional_t<is_true, int, float>> var;
};
© www.soinside.com 2019 - 2024. All rights reserved.