Câu hỏi liên quan

0 Phiếu
2 Câu trả lời
0 Phiếu
2 Câu trả lời

bằng cách sử dụng chỉ thị vs bằng tuyên bố trao đổi trong C++


0 Phiếu
Đã hỏi 09/5/2016 bởi sbe6509 (190 điểm)
Vui lòng tham khảo code dưới đây:
#include <algorithm>
namespace N
{
    template <typename T>
    class C
    {
    public:
        void SwapWith(C & c)
        {
            using namespace std; // (1)
            //using std::swap;   // (2)
            swap(a, c.a);
        }
    private:
        int a;
    };
    template <typename T>
    void swap(C<T> & c1, C<T> & c2)
    {
        c1.SwapWith(c2);
    }
}
namespace std
{
    template<typename T> void swap(N::C<T> & c1, N::C<T> & c2)
    {
        c1.SwapWith(c2);
    }
}
như viết ở trên, code không compile trên Visual Studio 2008 / 2010. error là:
'void N::swap(N::C<T> &,N::C<T> &)' : could not deduce template argument for 'N::C<T> &' from 'int'.
Tuy nhiên, nếu tôi nhận xét ra (1) và bỏ ghi chú (2), nó sẽ compile OK. Sự khác biệt giữa using namespace stdusing std::swap giải thích về hành vi này là gì?

Xin vui lòng đăng nhập hoặc đăng ký để trả lời câu hỏi này.


ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...