C++ 是条件类型定义';在C++;?
这个问题与c有关++ 有一个库声明了一个名为SolverC++ 是条件类型定义';在C++;?,c++,templates,typedef,typetraits,C++,Templates,Typedef,Typetraits,这个问题与c有关++ 有一个库声明了一个名为Solver的类。解算器是另一个类域的成员(由我编写) 现在有许多域有一个成员“int region” 我想做的是根据region的值,让解算器接受TS和FS的不同参数。 我在想一些事情 template<int region> struct Decider { if(region==1) { typedef TSA TS; typedef FSA FS; } else if(region==2)
template<int region>
struct Decider
{
if(region==1)
{
typedef TSA TS;
typedef FSA FS;
}
else
if(region==2)
{
typedef TSB TS;
typedef FSB FS;
}
}
模板
结构决策器
{
如果(区域==1)
{
typedef-TSA-TS;
typedef-FSA-FS;
}
其他的
如果(区域==2)
{
类型定义TSB TS;
类型定义FSB FS;
}
}
然后将其用作
Decider<region>::TS
Decider<region>::FS
Decider::TS
决策者:FS
然而,这里由于if的范围,我想结构是无用的。然而,我想不出更好的方法来做到这一点。有什么建议吗
所有不同的TS和FS具有相同的接口。所以我不必担心内部代码 您可以为任何
区域
值专门化模板
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;
};
模板
结构决策器;
模板
结构决策器
{
typedef-TSA-TS;
typedef-FSA-FS;
};
模板
结构决策器
{
类型定义TSB TS;
类型定义FSB FS;
};
您需要使用模板专业化
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;
};
模板
结构决策器;
模板
结构决策器
{
typedef-TSA-TS;
typedef-FSA-FS;
};
模板
结构决策器
{
类型定义TSB TS;
类型定义FSB FS;
};
C++将根据提供的区域
选择要使用的版本
当然,您可以根据您认为适合其他区域编号的情况对其进行扩展。如果您需要基于某个编译时常量参数化
决策器,您可以使用模板专门化(请参阅其他答案)
如果需要基于运行时值region
参数化决策器
,则也必须将参数化推迟到运行时。通常,这是通过某种创建函数或工厂习惯用法来完成的。请注意,现在遇到这种情况的人:
也可以通过使用的boost库实现这一点
typedef boost::条件MyTypeDef;
条件
仍然需要是计算结果为true或false的编译时表达式。这也使得您不需要只为几行差异专门化整个类。应该注意的是,模板参数必须是编译时常量。既然OP说他想使用一个成员变量int region
作为参数,我担心这个解决方案无法满足它的需要…(当然,我可能误解了这个问题。)是的。。。。最好将其作为int区域,但我想我可以使用编译时常量tooo来管理。我想这会让代码变长……只是为了确保我能像这样做对吗<代码>使用Decider::TS;解算器()
@Jayesh Badwaik,没有,但是你可以写typedef Decider::TS;解算器代码>其中的区域
是编译时常量。using
关键字用于使用名称空间。假设我需要一个region=1的定义和另一个region!=1那么,有可能吗?真是太棒了!!:-)
typedef boost::conditional<condition, type_if_true, type_if_false> MyTypeDef;