可变参数模板对

Posted

技术标签:

【中文标题】可变参数模板对【英文标题】:Variadic template couples 【发布时间】:2015-08-19 12:27:39 【问题描述】:

是否可以编写可变参数对的模板?比如:

template<typename<typename A, typename B>...>
class A : public std::tuple<A<B>...>

;

谢谢! :)

【问题讨论】:

您需要详细说明您的想法。很难理解你的目标是什么 我的最终目标是编写一个通用的方法来处理多个关联关系(我在谷歌上没有找到很多关于这个主题的内容,但如果你知道一个好的方法,我会喜欢的!) .所以这只是一个测试,看看我是否可以写类似的东西: class AnyClass : public IAmAssociatedTo, AnotherSingleRelation, AMultipleRelation> 说明为什么花园品种的可变参数模板不适合您。 有几种解决方法,具体取决于您在内部实际需要执行的什么 【参考方案1】:

使用类型列表我得到了编译:

#include <iostream>
#include <tuple>
using namespace std;

template <typename ...Args>
struct type_list
;

template<typename B, template <typename> class ...A>
class test;

template<typename ...B, template <typename> class ...A>
class test<type_list<B...>, A...>: tuple<A<B>...>
;

template<typename T> class t1;
template<typename T> class t2;
template<typename T> class t3;

int main() 
    auto t = test<type_list<int, double, char>, t1, t2, t3>();
    return 0;

我不知道,为什么你需要这个,但它应该可以满足你的需求。

【讨论】:

我也不知道我能用这个做什么,我只是探索几种可能性:) 这个答案非常适合我的要求,非常感谢!

以上是关于可变参数模板对的主要内容,如果未能解决你的问题,请参考以下文章

C++11 ——— 可变参数模板

如何对可变参数模板函数的异构参数包进行通用计算?

参数包没有用“...”扩展——gcc 的另一个可变参数模板错误?

对重载可变参数模板函数的歧义调用

如何使用可变参数模板参数保存可变数量的参数?

[C++11 模板的改进] --- 可变参数模板