#include <iostream>
template<typename T, int = 0>
struct test {
typedef char type[3];
};
template<int N>
struct test<long *, N> {
typedef char type[7];
};
int main()
{
std::cout << sizeof( test<int*>::type ) << std::endl; // 3
std::cout << sizeof( test<long*>::type ) << std::endl; // 7
return 0;
}
我期待sizeof( test<long*>::type ) == 3
。为什么是7?
答案 0 :(得分:3)
你所做的是你专门模板,说每当类型参数是long*
时,你应该使用模板的第二种形式。对于其他参数,它将使用模板的初始形式(大小为3)。
答案 1 :(得分:1)
您专门设置了模板,以便在类型参数为long*
时更改大小。我很确定你不能混合你想要使用的test<int*>
和test<123>
表单(参数的含义是什么类型或值?)。你能做的最好就是:
#include <iostream>
template<typename T, int = 0>
struct test {
typedef char type[3];
};
template<int N>
struct test<int, N> {
typedef char type[7];
};
int main()
{
std::cout << sizeof( test<int*>::type ) << std::endl; // 3
std::cout << sizeof( test<long*>::type ) << std::endl; // 3
std::cout << sizeof( test<int, 123>::type ) << std::endl; // 7
return 0;
}
也许如果你告诉我们你试图解决的真正问题会有所帮助。