VC10中的C++0x特性 part 3 :声明之类型
2009-06-10 20:07:33 来源:WEB开发网至于在返回语句中还要使用与传给 decltype 的表达式相同的形式,是为了确保在任何情况下都能正确工作。(突击测验:为什么 decltype(t + u) 就不对呢?)。这里的重复是不可避免的,但因为集中-只出现一次且代码位置靠近,所以不会有什么危险。
另一个例子
考虑到例子的完整性,下面是一个 “3种” 不同类型的示例:
C:Temp>type mult.cpp
#include <algorithm>
#include <iostream>
#include <iterator>
#include <ostream>
#include <utility>
#include <vector>
using namespace std;
struct Multiplies {
template <typename T, typename U>
auto operator()(T&& t, U&& u) const
-> decltype(forward<T>(t) * forward<U>(u)) {
return forward<T>(t) * forward<U>(u);
}
};
class
public:
explicit
int get() const { return m_n; }
private:
int m_n;
};
class Seconds {
public:
explicit Seconds(const int n) : m_n(n) { }
int get() const { return m_n; }
private:
int m_n;
};
class Joules {
public:
explicit Joules(const int n) : m_n(n) { }
int get() const { return m_n; }
private:
int m_n;
};
Joules operator*(const & w, const Seconds& s) {
return Joules(w.get() * s.get());
}
int main() {
vector<
w.push_back(
w.push_back(
w.push_back(
vector<Seconds> s;
s.push_back(Seconds(5));
s.push_back(Seconds(6));
s.push_back(Seconds(7));
vector<Joules> j;
transform(w.begin(), w.end(), s.begin(), back_inserter(j), Multiplies());
for_each(j.begin(), j.end(), [](const Joules& r) { cout << r.get() << endl; });
}
C:Temp>cl /EHsc /nologo /W4 mult.cpp
mult.cpp
C:Temp>mult
10
18
28
更多精彩
赞助商链接