c ++不是类模板

时间:2017-07-25 09:18:51

标签: c++ c++11 templates variadic-templates

我需要定义一个具有由模板类组成的元组的结构。

用法:

TestStruct<A, float, float, int32_t> test_a = { std::make_tuple(A(1.0), A(2.0), A(3)) };
TestStruct<B, float, float, int32_t> test_b = { std::make_tuple(B(1.0), B(2.0), B(3)) };

目前我的实施情况如下:

template<typename ClassBase, typename... ParamType>
struct TestStruct
{
    std::tuple<typename ClassBase<ParamType>...>  m_testValues;
};

通过编译我得到以下错误:

error: ‘ClassBase’ is not a class template
     std::tuple<class ClassBase<ParamType>...>  m_testValues;
                      ^

我如何定义我的结构?

1 个答案:

答案 0 :(得分:8)

模板不是类型。此参数typename ClassBase表示模板必须接受类型作为第一个参数。但它会继续将其视为模板ClassBase<ParamType>,但事实并非如此。

如果您需要模板模板参数,请将其声明为:

template<template<class> class ClassBase, typename... ParamType>
struct TestStruct
{
    std::tuple<ClassBase<ParamType>...>  m_testValues;
};