是否可以将派生模板类型作为参数传递给接受基类型的模板? 为什么我会收到此不完整类型 - 嵌套名称说明符错误?
#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/