template <bool S>
class NuclearPowerplantControllerFactoryProviderFactory {
// if S == true
typedef int data_t;
// if S == false
typedef unsigned int data_t;
};
template <bool S>
class NuclearPowerplantControllerFactoryProviderFactory
{
typedef typename select<S, int, unsigned int>::type data_t;
//use data_t as data type
};
3条答案
按热度按时间dced5bon1#
按专业化:
您可以选择将这两种情况中的一种作为主模板,另一种作为特殊化模板,但我更喜欢这种更对称的版本,因为
bool
只能有两个值。如果这是你第一次看到这一点,你可能还想考虑一下 partial specialization:
正如@Nawaz所说,最简单的方法可能是
#include <type_traits>
并说:w7t8yxp52#
@Kerrek已经充分回答了这个问题,但可以更通用如下:
并用作:
如果
S
为true,则选择select
中的第一个类型参数,否则选择第二个类型参数。它是通用的,因为您在select<>
中指定了两种类型,并且根据布尔值,select<b,T,U>::type
返回第一种类型或第二种类型。dgtucam13#
从C++14开始,它可以并且应该使用std::conditional<>来完成,参见https://en.cppreference.com/w/cpp/types/conditional
[在引擎盖下,它与@Nawaz建议的解决方案相同,但只要可用,标准解决方案总是首选]