如何在c++中获得基于可变大小的模板模板列表的元组

How to get a tuple based on list of template templates of variable size in C++?

本文关键字:元组 列表 于可变 c++      更新时间:2023-10-16

我创建了一个模板类,它接受两个普通模板形参(如int或double),并从它派生了几个其他类:

template <typename A, typename B>
class IClassBase {...}
template <typename B>
class Derived1Class : public IClassBase<std::string, B> {...}
template <typename B>
class Derived2Class : public IClassBase<std::string, B> {...}

我需要设计一个结构,允许编译器基于模板类型及其参数列表(上面代码片段中的B类型)构建std::元组。

所以给定下面的列表

Derived1Class<int>, Derived1Class<double>, Derived2Class<bool>, Derived2Class<std::string>

编译器应该推断出以下元组:

std::tuple<int, double, bool, std::string>

这是可能的,如果是,它如何在c++中完成?

这是可能的,如果是,它如何在c++中完成?

c++中一切皆有可能。特别是当前的c++标准。

#include <tuple>
#include <string>
template<typename template_type> class extract_param;
template<template<typename T> typename template_param, typename template_param_t>
class extract_param<template_param<template_param_t>> {
public:
    typedef template_param_t type_t;
};
template<typename ...Args>
using extract_tuple=std::tuple<typename extract_param<Args>::type_t...>;

template<typename T> class sometemplate {};
int main()
{
    extract_tuple< sometemplate<int>, sometemplate<std::string>> tuple;
    int &intref=std::get<0>(tuple);
    std::string &stringref=std::get<1>(tuple);
    return 0;
}