gpt4 book ai didi

c++ - Functor 类在构造函数中工作

转载 作者:行者123 更新时间:2023-11-27 23:35:24 28 4
gpt4 key购买 nike

我正在使用 C++ 模板传入 Strategy 仿函数以更改函数的行为。它工作正常。我传递的仿函数是一个没有存储的无状态类,它只是以经典的仿函数方式重载 () 运算符。

template <typename Operation> int foo(int a) 
{
int b=Operation()(a);
/* use b here, etc */
}

我经常这样做,而且效果很好,而且我经常制作带有 6 或 7 个传入的模板仿函数的模板!

但是我担心代码的优雅和效率。仿函数是无状态的,所以我假设 Operation() 构造函数是免费的,并且仿函数的计算与内联函数一样高效,但像所有 C++ 程序员一样,我总是有一些挥之不去的疑虑。

我的第二个问题是我是否可以使用另一种仿函数方法.. 一种不覆盖 () 运算符但在构造函数中作为副作用执行所有操作的方法!像这样的东西:

struct Operation {
Operation(int a, int &b) { b=a*a; }
};
template <typename Operation> int foo(int a)
{
int b;
Operation(a,b);
/* use b here, etc */
}

我从未见过有人将构造函数用作仿函数的“工作”,但它似乎应该可以工作。有什么好处吗?有什么缺点吗?我确实喜欢删除奇怪的双括号 "Operator()(a)",但这可能只是为了美观。

最佳答案

Any disadvantage?

  • Ctor 不返回任何有用的值——不能用于链式调用(例如 foo(bar())。
  • 他们可以 throw 。
  • 设计观点 -- 构造函数是对象创建函数,并不是真正的主力。

关于c++ - Functor 类在构造函数中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/622048/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com