gpt4 book ai didi

C++成员函数模板使用template

转载 作者:太空狗 更新时间:2023-10-29 20:55:02 25 4
gpt4 key购买 nike

抱歉混淆了标题。我不知道还能怎么说。例子应该能说明一切。

我找到了一个叫做 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 编号不能在结构内部,因为可能存在另一个具有不同编号但具有相同类型对象的类型映射。所以类型图适用于集合中结构的不同顺序,比如 vector ,因为顺序对我很重要。

接下来是非模板类,它具有 Type1-3 作为属性。我要做的是将这些属性插入到 vector 中,这是在 std::function 的帮助下完成的。但我需要采用通用类型映射并将其用作索引以插入到 vector 中。

我认为唯一可行的方法是使用更多模板。类似于下一个代码,但这不是正确的方法,因为我对模板还是新手,我需要帮助才能正确编写它,所以函数体 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 参数也有一些模板参数。抱歉我的英语不是母语。也对“..”感到抱歉,它与我的问题无关,它会弄乱代码。

最佳答案

Barry 的回答是做你想做的事情的更好方法,但这里是你关于拥有一个模板参数的具体问题的答案,该模板参数本身就是一个采用一个参数的模板:

  template<template<typename> class type_with_one_template_parameter>
void toVector()
{
std::vector<..> vect;
vect.resize(..);
vect[type_with_one_template_parameter<Type1>::INDEX] = type1_.someFunction(..);
vect[type_with_one_template_parameter<Type2>::INDEX] = type2_.someFunction(..);
}

不清楚为什么函数在您的原始示例中具有 T& typemap 参数,因此我已将其删除。

关于C++成员函数模板使用template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37279597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com