c++ - 如何添加依赖于类本身的模板成员变量
问题描述
我有一个模板类,需要传递一个可调用对象来处理错误。可调用对象必须重载void operator()(const boost::system::error_code&)
,并且它的类型作为模板参数传递以使类更通用(例如接受 lambdas)。
这个类看起来像这样
template <typename AsyncStream,
typename ErrorHandler,
typename = std::enable_if_t<...>>
struct basic_api {
...
private:
AsyncStream sock_;
ErrorHandler error_handler_;
};
现在,我想在另一个重载的类中创建这个类的一个实例void operator()(const boost::system::error_code&)
测试夹具示例:
struct BasicApiTest : ::testing::Test {
void operator()(const boost::system::error_code& err) {
// handler errors
}
std::shared_ptr<basic_api<tikpp::tests::fakes::socket, ???>> api;
};
我试图通过创建一个具有错误处理函数重载的附加类来解决这个问题,然后从它派生,如下所示:
struct error_handler {
void operator()(const boost::system::error_code& err)
// handle errors
}
};
struct BasicApiTest : error_handler, ::testing::Test {
using socket_type = tikpp::tests::fakes::socket;
using handler_type = error_handler;
using api_type = tikpp::basic_api<socket_type, handler_type>;
BasicApiTest() : api{...} {}
std::shared_ptr<api_type> api;
};
但是这个解决方案有很多限制。
这在 C++ 中是否可行,或者我应该找到另一种方法来传递错误处理程序?