对不起混淆标题。我不知道该怎么说。示例应该自行解释。使用模板的C++成员函数模板
我发现一种叫做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;
类型1类型2 &的Type3是stucts和这里一样使用类型。 INDEX编号不能位于结构体内,因为可能存在另一个具有不同编号但具有相同类型对象的类型映射表。因此,typemap适用于向量之类的集合中不同的顺序,因为顺序对我很重要。
接下来的事情是非模板类,它有Type1-3作为属性。我想要做的是将这些属性插入到vector中,这是在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参数也有一些模板参数。对不起,我的英语不是母语。对于“..”也很抱歉,这与我的问题无关,它会混淆代码。
您正在寻找[模板模板参数](http://en.cppreference.com/w/cpp/language/template_parameters#Template_template_parameter)。 – Quentin
当人们摆脱命名常量UPPERCASE的坏习惯时? – Slava
@Slava为什么这是一个坏习惯? – CppChris