【发布时间】:2015-08-05 19:15:02
【问题描述】:
当我遇到一个带有多个默认参数的模板时,例如
template<typename ID = int, typename PAYLOAD = std::string>
class Foo{};
有没有办法让我只覆盖几个默认参数,而不是全部?
即而不是编写以下代码来创建一个使用整数而不是 std::string 作为 PAYLOAD 参数的类,
typedef Foo<int,int> Bar;
我可以写类似的东西吗:
typedef Foo<PAYLOAD=int> Bar;
我正在处理另一个团队的带有许多默认参数的预定义模板,并且能够使用第二种方法似乎可以提高我的代码的清晰度。
查看 StackOverflow 上的文档和其他问题,这似乎是不可能的,但我想知道是否有人可以解释为什么这不是一个功能?
【问题讨论】:
-
Afaik 这仅在 Python 中才有可能(例如,也可能在其他脚本语言中)。在 C++ 中,我没有办法做到这一点。
-
这些是解决方法,例如boost.parameter,另见stackoverflow.com/q/4209326
-
您还可以使用一些构建器模式来实现接近于:
Foo_builder::Payload<int>::type的语法,或者指定两个参数Foo_builder::ID<double>::Payload<int>::type(以任何顺序)。 -
是所有参数类型吗?按索引覆盖可以吗?
标签: c++ templates default-arguments