派生类型作为模板接受基础的参数

时间:2013-11-19 13:19:18

标签: c++ templates

是否可以将派生模板类型作为参数传递给接受基类型的模板? 为什么我会得到这个不完整的类型 - 嵌套名称说明符错误?

    #include <iostream>
    #include <tuple>
    #include <typeinfo>
    #include <cxxabi.h>

    using namespace std;

    template<typename ...Types> struct derivedTuple : public std::tuple<Types...> {};

    int main() {
        int     status;

        cout << abi::__cxa_demangle(typeid(
                    tuple_element<0,
                        std::tuple<int, char, const char *>  // works
                    >::type
                ).name(),0,0,&status) << endl;

        cout << abi::__cxa_demangle(typeid(
                    tuple_element<0,
                    derivedTuple<int, char, const char *>  // error: incomplete type 'std::tuple_element<0u, derivedTuple<int, char, const char*> >' used in nested name specifier
                    >::type
                ).name(),0,0,&status) << endl;

        return 0;
    }

帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

根据标准std::tuple_element未定义std::tuple以外的类型。但是,如果需要,您可以实现这些特化,甚至可以转发到tuple变体。