我在命名空间中有一个类模板
并且我在该命名空间内有一个非成员函数,它返回std::tuple
我std::shared_ptr(s)<myown::myclass<Type>>
调用该函数F()
并将其 result( std::tuple
) 传递给另一个非成员函数(在myown
命名空间内)
namespace myown {
template<typename T> class myclass{ /*...*/};
template<> class myclass<void>{ /*...*/};
auto F()
{
return std::make_tuple(std::shared_ptr<myclass<int>>(),
std::shared_ptr<myclass<const char *>>(),
std::shared_ptr<myclass<int>>());
}
template <typename tup>
auto anotherF(tup&& result){
size_t s = std::tuple_size<tup>::value;//
/*...*/
}
}
int main()
{
auto tr = myown::F();
myown::anotherF(tr);
}
Run Code Online (Sandbox Code Playgroud)
std::tuple_size<tup>
结果的使用error: incomplete type...used in nested name specifier
您需要衰减类型以删除引用:
size_t s = std::tuple_size<std::decay_t<tup>>::value;
Run Code Online (Sandbox Code Playgroud)