WEB开发网
开发学院软件开发VC VC10中的C++0x特性 part 3 :声明之类型 阅读

VC10中的C++0x特性 part 3 :声明之类型

 2009-06-10 20:07:33 来源:WEB开发网   
核心提示: 至于在返回语句中还要使用与传给 decltype 的表达式相同的形式,是为了确保在任何情况下都能正确工作,VC10中的C++0x特性 part 3 :声明之类型(3),(突击测验:为什么 decltype(t + u) 就不对呢?),这里的重复是不可避免的,但因为集中-只出现一次且代码位置

至于在返回语句中还要使用与传给 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

上一页  1 2 3 4  下一页

Tags:VC 特性 part

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接