c++ - 函数返回的 decltype

标签 c++ templates c++11 decltype

我正在制作一个模板化类,它是任何迭代器的包装器。我正在以这种方式制作运算符(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/

相关文章:

C++ 为什么我的代码不打印对给定文件所做的更新

c++ - C++中的const变量和const指针是如何被编译器和操作系统对待的

c++ - 模板函数中如何实现模板类类型?

python - 表格模板

c++ - 为什么复制和 move 构造函数一起调用?

C++11 std::promise 从线程返回 std::string,数据指针看起来已复制未移动

c++ - 使用数组时可能导致此错误的原因是什么?解决方案?

c++ - 不合格的函数调用从错误的命名空间中选择函数

c++ - 子类中的类模板非类型成员访问

c++ - 通过计算差异来反转字符串中各个字符的字母值