【发布时间】:2011-12-31 23:30:07
【问题描述】:
问这个问题:Default argument in c++
假设我有这样一个函数:void f(int p1=1, int p2=2, int p3=3, int p4=4);
我想只使用一些参数来调用它 - 其余的将是默认值。
这样的事情会起作用:
template<bool P1=true, bool P2=true, bool P3=true, bool P4=true>
void f(int p1=1, int p2=2, int p3=3, int p4=4);
// specialize:
template<>
void f<false, true, false, false>(int p1) {
f(1, p1);
}
template<>
void f<false, true, true, false>(int p1, int p2) {
f(1, p1, p2);
}
// ... and so on.
// Would need a specialization for each combination of arguments
// which is very tedious and error-prone
// Use:
f<false, true, false, false>(5); // passes 5 as p2 argument
但它需要太多代码才能实用。
有没有更好的方法来做到这一点?
【问题讨论】:
-
您到底想要达到什么目的?我觉得无论您尝试做什么,都可以以更简单的方式完成。上面的代码看起来像是一场维护噩梦的开始。
-
@AndersK。一种指定我想使用哪些参数的方法。我同意不应该这样做,但我仍然很好奇是否可能。
-
你真的需要它吗?您将不得不考虑(N!)个参数放置的变体。 4! = 24 个定义。传递所有参数相当更清晰
-
@Andrey Atapin -- 这不是 n!,只是 2^n,差别很大。
-
顺便说一句。无论这个特定代码的原因是什么,都会出现类似的情况。在这种情况下,我编写 C++ 代码生成工具来处理它们,有些人使用 m4 宏处理器,有些人使用 VS 宏。我个人更喜欢代码生成而不是宏。
标签: c++ c++11 overloading default-arguments