错误:“x”不是类型,其中 x 是构造函数参数

Gue*_*OCs 0 c++ c++11

class Example {
    //...
    static auto make = []() -> std::shared_ptr<receiveObject> {
        return std::make_shared<receiveObject>(Params::EchoBufferSize);
    };

    static auto recycle = [](std::shared_ptr<receiveObject> o) {
        //nothing for now
    };
    recycle::shared_pool<receiveObject> receivePool(make, recycler);
};
Run Code Online (Sandbox Code Playgroud)

但我得到

In file included from /home/project/AIPTCPClient.cpp:57:0:
/home/project/AIPTCPClient.h:312:57: error: 'make' is not a type
         recycle::shared_pool<receiveObject> receivePool(make, recycler);
                                                         ^~~~
/home/project/AIPTCPClient.h:312:63: error: 'recycler' is not a type
         recycle::shared_pool<receiveObject> receivePool(make, recycler);
                                                               ^~~~~~~~
Run Code Online (Sandbox Code Playgroud)

正如您在shared_pool中看到的,它需要两个函数,这就是我传递 lambda 的原因。但 C++ 抱怨它们应该是类型。我不明白。为什么构造函数需要类型而不是对象?

son*_*yao 7

默认成员初始值设定项(C++11 起) 仅支持花括号初始值设定项和等号初始值设定项,但不支持括号初始值设定项;所以改变

recycle::shared_pool<receiveObject> receivePool(make, recycler);
Run Code Online (Sandbox Code Playgroud)

recycle::shared_pool<receiveObject> receivePool{make, recycler};
Run Code Online (Sandbox Code Playgroud)

或者

recycle::shared_pool<receiveObject> receivePool = recycle::shared_pool<receiveObject>(make, recycler);
Run Code Online (Sandbox Code Playgroud)