输入参数的类型取决于模板布尔值

pic*_*129 3 c++ templates using metaprogramming class

我的目的很简单,输入的数据类型取决于模板 bool:

template<bool isfloa>
class example{
public:
  if (isfloa){
    example(float p){printf("sizeof p: %d\n", sizeof(p))};
  } else{
    example(uint64_t p){printf("sizeof p: %d\n", sizeof(p))};
  }
};
Run Code Online (Sandbox Code Playgroud)

这无法通过编译,我有以下解决方案(尚未测试):

using dataType = isfloa ? float : uint64_t;
example(dataType p){printf("sizeof p: %d\n", sizeof(p))};
Run Code Online (Sandbox Code Playgroud)

我想知道这是否有效?还有其他解决方案吗?多谢。

app*_*ple 7

您可以使用std::conditional

template<bool isfloat>
class example{
public:
    using value_type = std::conditional_t<isfloat,float,int>;
    example(value_type p){printf("sizeof p: %d\n", sizeof(p));}
};
Run Code Online (Sandbox Code Playgroud)