【发布时间】:2011-10-24 16:39:46
【问题描述】:
我有很多带有这个签名的函数:
DoSomething(int x, int y, int z, int t, int u, int p);
它们都有相同数量的参数和相同类型的参数。
我希望能够像这样使用它们:
DoSomething(1, 2, 3, 4, 5, 6);
我知道编译器无法区分具有相同签名的函数(它们是完全非法的)。
为此,我想将函数的参数包装在逻辑“构造”中。这并不意味着类或结构。例如:
DoSomething(Construct1(x, y, z), Construct2(t, u, p));
or
DoSomething(Construct1(x, y), Constrcut2(t, u, p, o));
在这种情况下,我可以区分这两个函数并且它们具有相同数量的参数。如果我使用具有不同构造函数的对象,即使它是 const by ref,使用类或结构,仍然会创建 Construct。例如:
DoSomething(const Construct1& constr1, const Construct2& constr2)
{
constr1.x + constr2.t
}
DoSomething(Construct1(1, 2, 3), Construct2(4, 5, 6));
在这种情况下,Construct1 和 Construct2 都被创建了。
我想要的是:
DoSomething(Construct1(x, y, z), Construct2(t, u, p));
or
DoSomething(Construct1(x, y), Constrcut2(t, u, p, o));
在编译时展开为:
DoSomething(int x, int y, int z, int t, int u, int p);
从而消除了创建对象的需要。我不是在寻找对象解决方案。任何可以扩展它的东西都是受欢迎的。即使它是一个宏。我不是在寻找一个完整的解决方案,但如果您能指出我应该阅读的内容以便自己制作,那么这非常受欢迎。
提前致谢。
【问题讨论】:
-
您的参数列表中有两个
ys。 -
“我不想从包含数百万行的文件中读取值”是什么意思?
标签: c++ templates function macros