0

我目前有类似的东西:

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 之前的答案。

4

2 回答 2

0

这很容易通过右值引用完成。只需添加

template<typename T>
typename std::enable_if<!std::is_pointer<T>::value,void>::type
f( T &&t ) {
    // ...
}
于 2012-10-19T04:20:07.210 回答
-1

对于 11 之前的编译器,您始终可以参考 boost type traits lib。

boost::is_pointer

http://www.boost.org/doc/libs/1_43_0/libs/type_traits/doc/html/boost_typetraits/reference/is_pointer.html

我建议您从这里开始阅读类型特征的一些“背景和教程”。

于 2012-10-19T11:24:34.900 回答