我有一个由模板参数参数化的函数模板,以根据实例化的T
内容赋予它不同的行为。T
所需的具体变化非常简单,调用静态函数T::foo(some_args)
就足够了,因为不涉及任何状态。
但是我不希望它foo
出现在函数模板的正文中。
我宁愿打电话T(some_args);
来避免语法噪音。我相信将函数调用运算符声明()
为静态是不可能的(或者是吗?)。T
没有状态,因此没有特定于实例的变量。
如果上述情况不可行,那么更有可能获得内联/优化(在 G++、Clang、ICC 中)
T::foo(some_args); // foo being a static function
或者
T()(some_args); // operator () declared inline
我不知道汇编来检查输出,问题更多的是从学术/好奇心的角度来看,而不是实际表现。
T()(some_args)
真的在运行时分配一个对象吗?还是通常优化了?