在C ++模板中,当您在参数中指定类型时(下面的示例),这是否意味着该类型必须是int或提示?
template<typename T=int>
class Square_
{
}
答案 0 :(得分:3)
您指定默认类型。这意味着您可以在实例化模板时忽略类型,在这种情况下,将选择此默认类型。但是,当您手动指定一种类型时,该类型具有优先权。示例:
Square_<double> sq1; // explicitly given
Square_<> sq2; // uses default: int
答案 1 :(得分:1)
这是默认,与函数参数相同。因此,当您不想为默认类型选择其他类型时,可以使用Square_<>
来表示Square_<int>
。
例如:
#include <iostream>
#include <typeinfo>
void function(int i = 42)
{
std::cout << "function(" << i << ")\n";
}
template <typename T = int>
void function_template()
{
std::cout << "function_template<" << typeid(T).name() << ">\n";
}
int main() {
function();
function(56);
function_template<>();
function_template<double>();
}
将输出提供给我
function(42)
function(56)
function_template<i>
function_template<d>
(int和double类型的打印名称在您的系统上可能不同)
答案 2 :(得分:0)
这意味着如果您使用空的<>,则等同使用 请参见下面的示例。
template<typename T=int>
class Square_
{
public:
Square_()
{
if (std::is_same<T, int>::value)
{
std::cout<<"I am an int"<<std::endl;
}
else
{
std::cout<<"I am not an int"<<std::endl;
}
}
};
int main() {
Square_<> s1;
Square_<int> s2;
Square_<double> s2;
// your code goes here
return 0;
}
输出:
我是int
我是int
我不是整数