c++ - 派生类型作为接受基类的模板的参数

标签 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;
    }

感谢帮助。

最佳答案

按照标准std::tuple_element对于 std::tuple 以外的类型未定义。不过,如果您愿意,您甚至可以通过转发到 tuple 变体来实现这些特化。

关于c++ - 派生类型作为接受基类的模板的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072626/

相关文章:

c++ - QT 离屏渲染保持黑色

c++ - 给定两个相距已知距离的相机的两个图像,如何测量到物体的距离

c++ - 在 if-else block 中实现类似 SFINAE 的效果

c++ - 为什么我可以使用模板函数中的私有(private)方法

c++ - 错误 C2280 : attempting to reference a deleted function (trying to call vector. 删除)

c++ - C++ 中的节点类

c++ - 如何找到该图像或多或少是均匀的 w.r.t 颜色(色调)?

c++ - 复杂类的值类型,或类本身

c++ - 别名模板或专门的派生类?

c++ - 如何使模板函数的所有实例成为类的 friend ?