C++ 模板类方法的部分专门化或实例化
我有一个带有几个模板参数的模板结构C++ 模板类方法的部分专门化或实例化,c++,templates,C++,Templates,我有一个带有几个模板参数的模板结构 template<class Result, class T, class K> struct MyClass { public: Result foo() { return Result{}; } }; 这允许执行以下操作: int main() { MyClass<void, double, char> mycl1; MyClass<int, double, char&
template<class Result, class T, class K>
struct MyClass
{
public:
Result foo()
{
return Result{};
}
};
这允许执行以下操作:
int main()
{
MyClass<void, double, char> mycl1;
MyClass<int, double, char> mycl2;
mycl1.foo();
mycl2.foo();
}
intmain()
{
mycl1类;
MyClass mycl2;
mycl1.foo();
mycl2.foo();
}
<>在C++ 14标准中,有没有一种方法可以使<代码> MyCL1.FoE()/Cux>没有部分类专门化?如果constexr和type trait是无效的,我可以使用,但我想知道是否有办法:
- 模板类方法部分显式的特殊化
- 模板类方法的实例化
当你做不到的时候
Result foo()
{
return Result{};
}
如果结果
为无效
,则可以使用
Result foo()
{
return Result();
}
本例中的行为是相同的,您将得到一个返回的初始化对象值。当Result
为void
by时,允许使用此语法
如果初始值设定项是带括号的单个表达式,则类型转换表达式与相应的强制转换表达式等效(定义为,如果定义为含义)。如果类型为cv void且初始值设定项为(),则表达式是指定类型的prvalue,不执行初始化。否则,表达式是指定类型的prvalue,其结果对象由初始值设定项直接初始化。对于形式为T()的表达式,T不应是数组类型
很快就来,不过你可以使用
return Result{};
即使Result
是void
,C++20添加到该部分后,{}
也将适用于void
。现在声明
如果初始值设定项是带括号的单个表达式,则类型转换表达式等效于相应的强制转换表达式。否则,如果类型为cv void且初始值设定项为()或{}(包扩展后,如果有),则表达式是指定类型的prvalue,不执行初始化。否则,表达式是指定类型的prvalue,其结果对象由初始值设定项直接初始化。如果初始值设定项是带括号的可选表达式列表,则指定的类型不得为数组类型
当你做不到的时候
Result foo()
{
return Result{};
}
如果结果
为无效
,则可以使用
Result foo()
{
return Result();
}
本例中的行为是相同的,您将得到一个返回的初始化对象值。当Result
为void
by时,允许使用此语法
如果初始值设定项是带括号的单个表达式,则类型转换表达式与相应的强制转换表达式等效(定义为,如果定义为含义)。如果类型为cv void且初始值设定项为(),则表达式是指定类型的prvalue,不执行初始化。否则,表达式是指定类型的prvalue,其结果对象由初始值设定项直接初始化。对于形式为T()的表达式,T不应是数组类型
很快就来,不过你可以使用
return Result{};
即使Result
是void
,C++20添加到该部分后,{}
也将适用于void
。现在声明
如果初始值设定项是带括号的单个表达式,则类型转换表达式等效于相应的强制转换表达式。否则,如果类型为cv void且初始值设定项为()或{}(包扩展后,如果有),则表达式是指定类型的prvalue,不执行初始化。否则,表达式是指定类型的prvalue,其结果对象由初始值设定项直接初始化。如果初始值设定项是带括号的可选表达式列表,则指定的类型不得为数组类型
void main()
无效,已修复该问题you@user463035818编译器不会抱怨你没有从main返回任何东西吗?@Chipstermain
是一个例外,其中return
是可选的,如果你不写它,编译器将返回0对你来说,使用类模板的部分专门化对我来说似乎是一个很好的策略。使用时是否遇到任何问题?void main()
无效,已修复该问题you@user463035818编译器不会抱怨你没有从main返回任何东西吗?@Chipstermain
是一个例外,其中return
是可选的,如果你不写它,编译器将返回0对你来说,使用类模板的部分专门化对我来说似乎是一个很好的策略。你在使用它的时候遇到什么问题了吗?谢谢。通常我避免使用()作为构造函数,但在这种情况下,我必须使用it@Demaunt是的,不幸的是,统一初始化是完全统一的。谢天谢地,这种情况已经得到解决。这是统一初始化一致性的又一个例子;)达恩,非常感谢。通常我避免使用()作为构造函数,但在这种情况下,我必须使用it@Demaunt是的,不幸的是,统一初始化是完全统一的。谢天谢地,这种情况已经得到解决。这是统一初始化一致性的又一个例子;)