【发布时间】:2011-08-25 06:33:03
【问题描述】:
如何确定一个类型是否派生自模板类?特别是,我需要确定模板参数是否具有std::basic_ostream 作为基类。通常std::is_base_of 是工作的工具。但是,std::is_base_of 仅适用于完整类型而不适用于类模板。
我正在寻找这样的东西。
template< typename T >
bool is_based_in_basic_ostream( T&& t )
{
if( std::is_base_of< std::basic_ostream< /*anything*/>, T >::value )
{
return true;
}
else
{
return false;
}
}
我确定这可以做到,但我想不出怎么做。
【问题讨论】:
-
只是想扔进去......你可以用一个返回 if 语句中条件的
return行替换整个 if/else 分支! -
typename T是一个完整的类型吗?你会在你的代码中指定什么/* anything */? -
在我的情况下,我只希望在那里看到完整的字符类型。我相信 basic_ostream 不能被实例化,除非
/*anything*/是一个完整的类型。
标签: c++ templates metaprogramming c++11 typetraits