默认参数的默认构造
Default construction for default parameters
前提:我懒。而且我不喜欢排长队。
假设您有一个接受一个参数的函数,并且您想要为该参数指定一个默认值。假设参数是 std::map
,默认值只是一个空映射。方法是
void foo (std::map<Key,Value> the_map = std::map<Key,Value>());
现在,如果 Key
and/or Value
的名称很长(可能是模板化的),函数声明就会变长。如果有办法写类似
的东西就好了
void foo (std::map<Key,Value> the_map = auto);
现在,我知道这不是关键字 auto
的用途,而只是为了解释这个概念:我不想仅仅因为有写下一个简单的默认构造的默认元素。我只想告诉编译器"look, build a default one there"。有没有办法做到这一点?还有,有没有人也觉得有这个必要?
注意:是的,我可以键入定义地图类型并使用短名称。但我想要一种不同的方式。
注 2:是的,我也可以重载该函数,这样它的一个版本不带参数而另一个版本带参数。但我想要一个不同的方式。
我想我要找的是 "default default parameter"...
您可以使用 {}
作为 初始化器子句 ,这将对参数进行值初始化。
void foo(std::map<K, V> the_map = {});
前提:我懒。而且我不喜欢排长队。
假设您有一个接受一个参数的函数,并且您想要为该参数指定一个默认值。假设参数是 std::map
,默认值只是一个空映射。方法是
void foo (std::map<Key,Value> the_map = std::map<Key,Value>());
现在,如果 Key
and/or Value
的名称很长(可能是模板化的),函数声明就会变长。如果有办法写类似
void foo (std::map<Key,Value> the_map = auto);
现在,我知道这不是关键字 auto
的用途,而只是为了解释这个概念:我不想仅仅因为有写下一个简单的默认构造的默认元素。我只想告诉编译器"look, build a default one there"。有没有办法做到这一点?还有,有没有人也觉得有这个必要?
注意:是的,我可以键入定义地图类型并使用短名称。但我想要一种不同的方式。 注 2:是的,我也可以重载该函数,这样它的一个版本不带参数而另一个版本带参数。但我想要一个不同的方式。
我想我要找的是 "default default parameter"...
您可以使用 {}
作为 初始化器子句 ,这将对参数进行值初始化。
void foo(std::map<K, V> the_map = {});