use*_*401 2 c++ visual-c++ c++11
我目前有一个模板功能,如下所示:
enum class MyEnum { ENUM_1, ENUM_2, ENUM_3 };
template<MyEnum e, typename T>
void func( int i )
{
std::vector<T> someData = ......;
T someValue;
switch( e )
{
case ENUM_1:
someValue += func1( someData );
break;
case ENUM_2:
someValue += func2( someData );
break;
case ENUM_3:
someValue += func3( someData );
break;
}
}
Run Code Online (Sandbox Code Playgroud)
类型T取决于的值e.我想写这样的代码
template<MyEnum e>
void func( int i )
{
if( e = MyEnum:ENUM_1 ) T = char;
else T = float;
std::vector<T> someData = ......;
T someValue;
switch( e )
{
case ENUM_1:
someValue += func1( someData, ..... );
break;
case ENUM_2:
someValue += func2( someData, ..... );
break;
case ENUM_3:
someValue += func3( someData, ..... );
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到如何使类型依赖于另一种类型,例如
typedef std::conditional<std::is_same<T1, float>::value, char, float>::type T;
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚如何扩展它以应对枚举值.有可能做我想做的事吗?如果是这样,怎么样?
注:func1,func2并且func3是固定的,超出了我的控制.
谢谢!
作为替代
using T = std::conditional_t<e == MyEnum::ENUM_1, char, float>;
Run Code Online (Sandbox Code Playgroud)
您可以创建特征,例如:
template <MyEnum> struct helper_fun;
template <> struct helper_fun<MyEnum::ENUM_1>
{
using type = char;
static constexpr char (*f)(const std::vector<char>&) = &func1;
};
template <> struct helper_fun<MyEnum::ENUM_2>
{
using type = float;
static constexpr float (*f)(const std::vector<float>&) = &func2;
};
Run Code Online (Sandbox Code Playgroud)
然后(不再切换)
template<MyEnum e>
void func( int i )
{
using T = typename helper_fun<e>::type;
std::vector<T> someData = ......;
T someValue;
someValue += helper_fun<e>::f(someData, .....);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |