【发布时间】:2016-05-17 14:54:21
【问题描述】:
抱歉,标题混淆了。我不知道还能怎么说。示例应自行解释。
我发现了一个名为 typemaps 的东西,并将其用于我的代码,如下所示:
template<typename T>
struct typemap
{
static const int INDEX;
};
template<>
const int typemap<Type1>::INDEX = 1;
template<>
const int typemap<Type2>::INDEX = 3;
template<>
const int typemap<Type3>::INDEX = 11;
Type1 Type2 & Type3 是结构体,使用起来就像这里的类型。 INDEX 编号不能在结构内部,因为可能存在另一个具有不同编号但具有相同类型对象的类型映射。所以类型图适用于集合中不同顺序的结构,如矢量,因为顺序对我很重要。
接下来是非模板类,它具有 Type1-3 作为属性。而我要做的是将这些属性插入向量中,这是在 std::function 的帮助下完成的。但我需要采用通用类型映射并将其用作插入向量的索引。
我认为它唯一可行的方法是使用更多模板。类似于下一个代码的东西,但这不是正确的方法,因为我还是模板的新手,我需要帮助才能正确编写它,所以函数体 toVector 根据需要开始工作。
class MyClass
{
Type1 type1_;
Type2 type2_;
Type3 type3_;
..
template<typename T>
void toVector(T& typemap)
{
std::vector<..> vect;
vect.resize(..);
vect[typemap<Type1>::INDEX] = type1_.someFunction(..);
vect[typemap<Type2>::INDEX] = type2_.someFunction(..);
}
};
我确定我在成员函数中使用了错误的模板,我不知何故需要说 T 参数也有一些模板参数。对不起我的英语,不是母语人士。也很抱歉“..”这与我的问题无关,它会弄乱代码。
【问题讨论】:
-
当人们改掉将常量命名为大写的坏习惯时?
-
@Slava 为什么这是一个坏习惯?
-
@ChrisG 常量在 C++ 中被用作预处理宏,预处理宏为大写以避免命名冲突。这种习惯就是从那里养成的。常量不再是宏,出于完全相同的原因,最好不要使用大写。