有人可能想要使用参数声明一个函数,并指定参数的默认值是类型的默认构造函数的结果:
void foo(a::really::long::type::name arg = a::really::long::type::name());
是否有更好的语法,不涉及两次输入类型名称?类似的东西:
void foo(a::really::long::type::name arg = default);
我意识到我可以typedef
类型名称使其更漂亮,但我很好奇是否存在这样的语法。
答案 0 :(得分:3)
如果您控制arg
的班级,则可以采用行人方式。使用为enum
重载的转换构造函数:
// Define this enum, and then write constructors which take dfl
enum dfl { dflval };
class a_really_long_type_name {
public:
a_really_long_type_name(dfl arg = dflval);
};
现在foo可以是:
void foo(a_really_long_type_name arg = dflval);
如果你可以申请,可以获得便携性;这应该可以在一个有二十五年历史的C ++编译器中正常工作。
多个类都可以共享此dfl
enum
及其dflval
- 风味零;这就像拥有一个新关键字一样。
因为enum
是一个不同的类型,所以这不会干扰整数类型或字符的构造函数重载等等。
缺点是它已经进入了一些已经通过参数默认提供默认构造的类,这导致了重复的构造函数代码。