我目前有类似的东西:
template<typename T>
typename std::enable_if<!std::is_pointer<T>::value,void>::type
f( T const &t ) {
// ...
}
也就是说,如果f
是指针类型,我不希望考虑T
。这样可以正常工作。但是,现在我想要两个不同版本的f
,基于它的参数是否是由值返回的值与引用返回的值:
std::string const& ret_by_ref();
std::string ret_by_val();
f( ret_by_ref() ); // I want the existing function to be called here
f( ret_by_val() ); // I want a new template specialization of f() called here
如何扩充f
的现有声明并创建一个新f
,以便按上面所示调用它们?
前C ++ - 11的回答表示赞赏。
答案 0 :(得分:0)
使用右值引用很容易做到这一点。只需添加
template<typename T>
typename std::enable_if<!std::is_pointer<T>::value,void>::type
f( T &&t ) {
// ...
}
答案 1 :(得分:-1)