是否有可能从函数返回类型作为返回类型 并使用以下内容将其用于成员变量:
constexpr type myFunction(int a, int b){
if(a + b == 8) return int_8t;
if(a + b == 16) return int_16t;
if(a + b == 32) return int_32t;
return int_64t;
}
template<int x, int y>
class test{
using type = typename myFunction(x, y);
private:
type m_variable;
};
在Qt中尝试此示例时,它说
Error: 'constexpr' does not name a type
Error: 'test' is not a template type
class test{
^
在之前的一个问题中有人向我展示了http://en.cppreference.com/w/cpp/types/conditional这个函数,但它仅适用于2种类型。
答案 0 :(得分:4)
使用普通功能无法做到这一点。但是,使用模板元编程很容易完成。这种模板有时称为类型函数。
#include <cstdint>
template<int bits> struct integer { /* empty */ };
// Specialize for the bit widths we want.
template<> struct integer<8> { typedef int8_t type; };
template<> struct integer<16> { typedef int16_t type; };
template<> struct integer<32> { typedef int32_t type; };
可以像这样使用。
using integer_type = integer<16>::type;
integer_type number = 42;
如果integer<T>::type
本身就是模板参数,请务必在typename
之前加上T
关键字。
我将它作为练习留给你,将它扩展为一个接受两个整数作为参数的模板,并根据两者的总和返回相应的类型。