我正在制作一个模板化类,它是任何迭代器的包装器。我正在以这种方式制作运算符(operator)*:
template <typename T>
class MyIterator {
public:
//...
decltype(*T()) operator*() {
//...
}
}
我给 decltype 一个对类 T 的 operator* 的调用,它甚至可以工作,但如果 T 没有默认构造函数,它就不会工作。
有没有办法找出函数/方法的返回类型?
最佳答案
这就是 std::declval
的用途:
decltype(*std::declval<T>()) operator*() { /* ... */ }
如果你的实现没有提供std::declval
(Visual C++ 2010 不包括它),你可以很容易地自己写:
template <typename T>
typename std::add_rvalue_reference<T>::type declval(); // no definition required
由于 T
是迭代器类型,您还可以使用 std::iterator_traits
模板,它不需要任何 C++0x 支持:
typename std::iterator_traits<T>::reference operator*() { /* ... */ }
关于c++ - 函数返回的 decltype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837444/