Tôi đã đi qua đoạn mã này là những gì (Tôi đang cố gắng để bao gồm tất cả các chi tiết trong trường hợp tôi đang thiếu một cái gì đó):mục đích typename phân bên trong mẫu
template< typename TYPE = TYPE_with_an_arbitrarily_long_name,
typename KIND = KIND_with_an_arbitrarily_long_name>
class Foo
{
public:
virtual void bar(TYPE& t, KIND& k) = 0;
};
Và phần I don' t hiểu là các bài tập bên trong mẫu:
template <typename TYPE = TYPE_with_an_arbitrarily_long_name, ..
Tôi đã cố gắng hiểu tác dụng của điều này nhưng cho đến nay tôi không thể sản xuất được. Dưới đây là một số nội dung tôi đã cố gắng:
#include <iostream>
#include <typeinfo>
using namespace std;
template<typename T>
void foo(T t) {
cout << typeid(t).name() << " ";
}
template<typename T = int>
void bar(T t) {
cout << typeid(t).name() << " ";
}
template<typename T = double>
void baz(T t) {
cout << typeid(t).name() << " ";
}
int main()
{
cout << "\nfoo: ";
foo(3); foo<int>(3); foo<double>(3);
cout << "\nbar: ";
bar(3); bar<int>(3); bar<double>(3);
cout << "\nbaz: ";
baz(3); baz<int>(3); baz<double>(3);
return 0;
}
in ra:
foo: i i d
bar: i i d
baz: i i d
Vì vậy, câu hỏi của tôi là:
- ảnh hưởng của phân bên trong
template
là gì? - Mục đích của việc sử dụng nó trong ví dụ trên là gì?
- Không có câu hỏi thứ ba.
Any help is appreciated ..
EDIT hóa ra chức năng chỉ có thể biên dịch được với C++ 11
Nitpicking: 'std :: string' không có tham số mẫu nào vì nó là' typedef' (cho 'std :: basic_string'); những gì bạn đang nói về có lẽ là 'std :: basic_string', trong đó có các giá trị mặc định (dựa trên kiểu ký tự) cho các tham số và các tham số cấp phát. –
+1 để làm cho tôi nhận ra tôi đã quên công tắc '-std = C++ 0x' của mình trên – none