10 c++ templates typedef type-traits
这个问题与c ++有关
有一个库声明了一个名为Solver <TS,FS>的类.求解器是另一个类域的成员(由我编写)
现在有很多域都有成员"int region"
我想要做的是取决于region的值,我想让求解器接受TS和FS的不同参数.我在考虑一些事情
template<int region>
struct Decider
{
if(region==1)
{
typedef TSA TS;
typedef FSA FS;
}
else
if(region==2)
{
typedef TSB TS;
typedef FSB FS;
}
}
Run Code Online (Sandbox Code Playgroud)
然后用它作为
Decider<region>::TS
Decider<region>::FS
Run Code Online (Sandbox Code Playgroud)
但是,这里由于if的范围,我猜结构是没用的.但是,我无法想到一个更好的方法来做到这一点.有什么建议?
所有不同的TS和FS都具有相同的接口.所以我不必担心内部代码.
Kir*_*sky 16
您可以为任何region值专门化模板.
template<int region>
struct Decider;
template<>
struct Decider<1>
{
typedef TSA TS;
typedef FSA FS;
};
template<>
struct Decider<2>
{
typedef TSB TS;
typedef FSB FS;
};
Run Code Online (Sandbox Code Playgroud)
您需要使用模板专业化.
template <int region>
struct Decider;
template <>
struct Decider<1>
{
typedef TSA TS;
typedef FSA FS;
};
template <>
struct Decider<2>
{
typedef TSB TS;
typedef FSB FS;
};
Run Code Online (Sandbox Code Playgroud)
C++将根据region提供的选择使用哪个版本.
当然,您可以根据其他区域编号扩展此范围.
如果需要Decider根据某些编译时常量进行参数化,可以使用模板特化(参见其他答案).
如果需要Decider根据运行时值进行参数化,则必须将参数化region推迟到运行时.通常这是通过某种创建功能或工厂习惯来完成的.
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |