gpt4 book ai didi

c++ - 如何调用作为模板参数传递给类的标准函数?

转载 作者:行者123 更新时间:2023-11-30 01:42:33 25 4
gpt4 key购买 nike

所以我有这样一个类

template <typename T>
class Foo{
public:
Foo(T& outputProcessor):
_output(outputProcessor){}
protected:
void processData(int data){
std::map<std::string,int> output;

//T(output); ??
}
T& _output;
};

然后我正在创建它:

Foo< decltype (processOutput) >(processOutput)

processOutput 定义为

std::function<void(std::map<std::string, int>)> processOutput;

我可以从 Foo 调用 T 吗?如果可以,如何调用?

最佳答案

作为替代实现,您可以从 T 私有(private)继承,如下所示:

template <typename T>
class Foo: private T {
public:
Foo(T outputProcessor):
T(std::move(outputProcessor)) { }
protected:
void processData(int data) {
std::map<std::string,int> output;
(*this)(output);
// Or: T::operator()(output);
}
};

这样,outputProcessor 策略就应该成为 Foo 类的一部分。

你仍然可以构造一个 Foo 的实例,如下所示:

int main() {
std::function<void(std::map<std::string, int>)> processOutput = [](std::map<std::string, int>){};
Foo< decltype (processOutput) > foo(processOutput);
}

或者直接使用lambda函数:

int main() {
auto processOutput = [](std::map<std::string, int>){};
Foo< decltype (processOutput) > foo(processOutput);
}

实际上不需要 std::function 来做到这一点。

关于c++ - 如何调用作为模板参数传递给类的标准函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453551/

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