【发布时间】:2014-03-25 08:26:00
【问题描述】:
我需要为一些特定的模板参数实例化一个带有长签名的模板函数foo()。
我刚刚阅读了this question 的答案,它基本上建议复制函数签名但设置特定参数。我想以某种方式避免这种情况。实现这一目标的合理方法是什么?例如可以让我写的东西
INSTANTIATE(foo, template_arg1, template_arg2);
或许
MyFunctionType<template_arg1, template_arg2> foo;
仅出于说明目的,假设这是foo 的代码:
template<typename T, int val>
unsigned foo(
T bar,
SomeType baz1,
SomeOtherType baz2,
YetAnotherType you_catch_the_drift)
{
/* some code here */
}
【问题讨论】:
-
@jrok:我认为这不重要,但现在看看我的编辑。
-
在 C++11 中,您可以使用模板别名为您的函数类型创建一个别名,部分参数化。如果您的函数有太多参数,这会有所帮助,但其中一些是众所周知的(经常使用),而另一些则不是,应该由函数类型的用户指定。
-
这同样适用于函数的使用,不仅仅是其类型的实例化/声明。您可以使用 std::bind() 绑定众所周知的参数,并减少用户应在调用点指定的参数数量。
-
@Manu343726:你能给出示例代码吗?另外,我可以使返回类型非常冗长乏味,例如std::tuple<:map>, std::vector<:list>>` 什么的。
标签: c++ function templates instantiation code-duplication