Đoạn mã sau đây làm việc cho tôi:mẫu Member chức năng và điều hành quá tải() trong C++
class Foo {
public:
template <class T> T& get() { ... }
};
Foo foo;
foo.get<int>() = ...;
Tuy nhiên, đoạn mã sau đây không làm việc cho tôi:
class Foo {
public:
template <class T> T& operator()() { ... }
};
Foo foo;
foo<int>() = ...;
Các lỗi là:
expected primary-expression before '>' token
expected primary expression before ')' token
Cả hai lỗi đều đề cập đến foo<int>()
Tại sao tính năng này không hoạt động và có thể sửa lỗi này không?
Toán tử 'template()' của mẫu của bạn là khá không thể sử dụng được, vì các instantiations của nó sẽ quá tải trên giá trị trả về chỉ. Tiếp tục sử dụng tên 'get' hoặc tương tự. – aschepler
Nó không phải là không sử dụng được (mặc dù nó có thể không được ưa thích). Xem các câu trả lời dưới đây. –
Tại sao bạn templatizing các chức năng nhưng không phải là lớp học như một toàn thể? –