0

転送コピー ctor が機能しない理由を知っている人はいますか?

1 つのタイプがベクターであり、他のタイプがスタックであるというコンパイラ エラー ???

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <type_traits>

using namespace std;

template<class T>
class stack{
public:
    stack();

    template<class X>
    stack(X&& other);

    template<typename X>
    void push(X&& element);

    T const & top() const;

    void pop();

    inline std::size_t const size() const;

    typedef std::vector<T> vector_type;

private:
    std::vector<T> elements;
};


template<class T>
stack<T>::stack(){}

template<class T>
template<class X>
stack<T>::stack(X&& other) : elements(std::forward<typename X>(other.elements)){

}

template<class T>
template<class X>
void stack<T>::push(X&& element){
    this->elements.push_back(std::forward<X>(element));
}

template<class T>
T const & stack<T>::top() const{
    return this->elements[this->elements.size() -1];
}

template<class T>
inline std::size_t const stack<T>::size() const{
    return this->elements.size();
}

template<class T>
void stack<T>::pop(){
    this->elements.pop_back();
}

template<class T,int N>
stack<T> get_stack_of_n_defaults(){

    stack<T> s;

    for(int i = 0; i < N; ++i){
        s.push( T()); // should pass by rvalue ref;
    }

    return s;

}


int main()
{

    stack<int> s = get_stack_of_n_defaults<int,5>();

    for(int i = 0; i <= 10; ++i){
        s.push(i);
    }

    cout << s.size() << endl;

    for(int i = 0; i <= 10; ++i){
        cout << s.top() << endl;;
        s.pop();
    }

    cout << s.size() << endl;

    return 0;
}
4

1 に答える 1

1

私はあなたがこの行を参照していると推測しています:

std::forward<typename X>(other.elements)

の型は でother.elementsはありませんX

私はこれがうまくいくと信じています:

std::forward<X>(other).elements
于 2012-11-30T06:22:19.677 に答える