Một lớp có thể chứa một biến thành viên mẫu mà phải tĩnh:viên mẫu biến chuyên
class B
{
public:
template <typename X>
static X var;
B() { std::cout << "Create B " << __PRETTY_FUNCTION__ << std::endl; }
template <typename T>
void Print() { std::cout << "Value is " << var<T> << std::endl; }
};
Nó thành viên như tất cả các tĩnh phải được khai báo bên ngoài phạm vi lớp:
Các biên dịch sau và hoạt động như dự kiến:
template<typename T> T B::var=9; // makes only sense for int,float,double...
Nhưng làm thế nào để chuyên var như mã không hoạt động sau (thông báo lỗi với gcc 6.1):
template <> double B::var<double>=1.123;
Không với:
main.cpp:49:23: error: parse error in template argument list
template <> double B::var<double>= 1.123;
^~~~~~~~~~~~~~~~~~
main.cpp:49:23: error: template argument 1 is invalid
main.cpp:49:23: error: template-id 'var<<expression error> >' for 'B::var' does not match any template declaration
main.cpp:38:22: note: candidate is: template<class X> T B::var<T>
static X var;
template <> double B::var=1.123;
Không với
template <> double B::var=1.123;
^~~
main.cpp:38:22: note: does not match member template declaration here
static X var;
cú pháp chính xác ở đây là gì?
Bạn có thể vui lòng bao gồm lỗi thực tế bạn nhận được ? – NathanOliver
@NathanOliver: Xong;) – Klaus
Những thứ đó ít hữu ích hơn. Tôi đã hy vọng sẽ có một cái gì đó trong đó để làm cho tiêu đề tìm kiếm nhiều hơn nhưng than ôi, trình biên dịch không giúp đỡ ở đây. – NathanOliver