对于模板函数中的特定类型,具有不同的行为
Have different behavior for specific type in a template function
我正在开发一个logHelper函数。我已经使<lt;运算符和我将该值写入一个ostream objecct。如何处理从同一基类派生的类的特殊行为。
更具体地说,我想为一个异常添加what()返回的字符串。
template <class T>
LogStream& operator<<(const T& t)
{
if (std::is_base_of<std::exception, T>::value)
{
std::exception exception = std::dynamic_cast<std::exception>(t);
m_output << exception.what();
}
else
{
m_output << t;
}
return *this;
}
如果您希望根据模板参数有不同的代码,您需要以某种方式提供在适当的类型点选择的完全独立的定义。例如,您可以使用
template <class T>
typename std::enable_if<std::is_base_of<std::exception, T>::value, LogStream>::type&
operator<<(const T& t)
{
m_output << t.what();
return *this;
}
template <class T>
typename std::enable_if<!std::is_base_of<std::exception, T>::value, LogStream>::type&
operator<<(const T& t)
{
m_output << t;
return *this;
}
使用具有否定条件的std::enable_if<condition, T>
应该启用一个或另一个实现。
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 使用此类型函数有什么优势
- 为什么此函数通过类型函数指针调用后,呼叫明智地行为
- 如何使用无类型函数指针调用C++成员函数
- 模板返回类型函数如何在C++中工作
- 具有通用类型函数的动态库[C ]
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 对于需要其他模板参数的类型函数的部分模板专业化
- c++错误的参数类型-函数指针
- 延迟评估模板类型函数
- 在引用或指针返回类型函数上输入
- 具有指针数据类型的非类型函数模板参数
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- C++模板基类的非类型函数模板的 using 声明
- 字符串到类型函数,模板专用化使调用统一
- 自由类型函数可以接受 Unicode 文件名吗?