我正在制作一个模板化的类,它是任何迭代器的包装器。我让运算符*这样:
template <typename T>
class MyIterator {
public:
//...
decltype(*T()) operator*() {
//...
}
}我给decltype一个调用T类的运算符*,它甚至可以工作,但是如果T没有默认的构造函数,它就不能工作。
有没有办法找出函数/方法的返回类型?
发布于 2011-07-27 06:36:56
这就是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*() { /* ... */ }https://stackoverflow.com/questions/6837444
复制相似问题