【发布时间】:2012-10-19 04:02:45
【问题描述】:
我目前有类似的东西:
template<typename T>
typename std::enable_if<!std::is_pointer<T>::value,void>::type
f( T const &t ) {
// ...
}
也就是说,如果T 是指针类型,我不希望考虑f。这可以正常工作。但是,现在我想要两个不同版本的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 之前的答案。
【问题讨论】:
-
为什么要区分值传入还是引用传入?如果你重载这些函数,它们似乎会模棱两可。
-
因为通过引用,我想缓存结果;对于按值,缓存结果是没有意义的,因为对象是临时的。你能回答这个问题吗?