是否可以在C++中"捆绑"模板参数?

Zac*_*ack 2 c++ templates using-declaration c++11

有没有办法将模板参数"捆绑"在一起以避免重复?

我有几个类和函数都使用相同的三个模板参数.拥有一次使用每个类/函数的函数并不罕见.结果代码非常快速地变得非常混乱.是否有更简洁的方法来编写此代码?

// ContextFactory is a pointer to functions that instantiate objects that are subtypes of MetricContext
template<typename VertexID, typename EdgeMembershipType, typename SetBitmap>
using ContextFactory = MetricContext <VertexID, EdgeMembershipType, SetBitmap> *(*)(const char *);

template<typename VertexID, typename EdgeMembershipType, typename SetBitmap>
    static vector<ContextFactory<VertexID, EdgeMembershipType, SetBitmap>> buildCFList() {
      vector<ContextFactory<VertexID, EdgeMembershipType, SetBitmap>> answer;
      answer.push_back(MetricContext<VertexID, EdgeMembershipType, SetBitmap>::template make<NeoContext<VertexID, EdgeMembershipType, SetBitmap >>);
      return answer;
    };
Run Code Online (Sandbox Code Playgroud)

请注意,此函数的近一半是字符串的重复<VertexID, EdgeMembershipType, SetBitmap>>,但每次使用此字符串都适用于不同的类或函数,因此我认为别名不起作用.

(如果它有帮助,这个函数的目的是创建一个指向函数的指针数组,这些函数将创建作为子类型的子对象的对象 MetricContext<VertexID, EdgeMembershipType, SetBitmap>>

Mar*_*ica 5

比@昆汀的是让你的模板一个较为具体的做法依赖于一个参数-预计将有类型定义 VertexID,EdgeMembershipTypeSetBitmap.

// ContextFactory is a pointer to functions that instantiate objects that are 
// subtypes of MetricContext
template<typename Types>
using ContextFactory = MetricContext <Types> *(*)(const char *);

template<typename Types>
    static vector<ContextFactory<Types>> buildCFList() {
      vector<ContextFactory<Types>> answer;
      answer.push_back(MetricContext<Types>::template make<NeoContext<Types>>);
      return answer;
    };
Run Code Online (Sandbox Code Playgroud)

请注意,当您想要实际使用其中一个typedef时,您需要使用例如:typename Types::VertexID.

(理想情况下,您会想出一个比Types模板参数更好的名称.)