2010-07-23 69 views
3

为了使我的代码更简洁,我可以这样做复合参数声明

int f(int const x, y, z), g(int const x, y, z); 

声明函数f和g,每个取3个int常量参数?

编辑: 也许这里是一个更好的例子:

int f(int const a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z); 

怎么会不是是不是把INT常量的每一个字母之前更简洁,可读性?

+0

试一试并编译它。它工作吗? – Anthony 2010-07-23 04:23:49

+0

@Duracell:注意单词“like”。 – user383352 2010-07-23 04:25:08

+0

也许我错过了这是如何使代码更加consise而不是更少可读性。也许一个更好的例子会显示我错过了什么? – 2010-07-23 04:26:24

回答

2

使用Boost预处理器,并考虑你不在乎来描述一个函数参数之一(但不是你的问题点),可以使用下面的技巧:

#include <boost/preprocessor/repetition/enum_params.hpp> 

int f(BOOST_PP_ENUM_PARAMS(26, int const arg)); 

但不要忘记,没有花时间和空间来描述函数参数的想法是非常危险的。

0

都能跟得上:)

顺便说一句,有些人会便便,便便你这样做,即使它是可能的。另一方面,C++的简洁性并不为人所知。

0

据我所知,没有。我认为这会让你的代码更加“简洁”,就像删除注释和空白一样。它会使它看起来更短,但是它的可读性会低得多。 我喜欢这样一个事实,即每个函数声明都必须非常明确,并且在C++中是独立的(尽管我从未遇到允许声明多个函数的语言)。 所以,总之,没有。

+0

技术上用一个表达式来声明多个函数。 – 2010-07-23 04:40:58

4

对于C代码,如果你真的坚持下来,你可以使用旧式(K & R)功能标题:

typedef int const cint; 

int f(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) 
cint a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z; 
{ 
    // function body here 
} 

请注意,我不推荐这 - 和C++不支持这个,所以你可以使用它的唯一方法是使用C编译函数本身,并且包含一个extern "C"声明以从C++访问它。

但是,我还要指出,无论如何,整个想法都让我感到无聊。首先,一个具有足够参数的功能值得考虑,基本上保证是一场灾难。其次,顶级const(即应用于参数本身,而不是指向或指向的参数)是完全没有意义的,并且在任何情况下(IMO)都是一个糟糕的主意。

0

为什么你需要那个?输入几个额外的字符并没有太大的区别。如果你需要的不仅仅是一些方法,你应该重构代码,所以你不必传递很多参数。

话虽如此,在某些情况下,正确的解决方案可能是使用可变参数的功能,所以你可以做:

int f(const int arg1, ...) 
1

如果你正在服用的是,许多同一类型的参数,它的时间来唤醒并采取std ::/std :: tr1 ::/boost :: array<int, count> const&。这就是阵列的用途。