C++标准或C++标准库中的内容会实现什么get_base_template_arg<>
这个例子是做什么的?
template <typename TResponse>
class request {};
class request1 : public request<int> {};
class mediator {
public:
template <typename TRequest, typename TResponse
= get_base_template_arg<TRequest>::type>
TResponse send(TRequest r) { /* ... */ }
};
我可以做到:
mediator m{};
request1 r{};
int x = m.send(r);
编辑: 谢谢Brian的回答;一个完整的解决方案可能如下所示:
template <typename TResponse>
class request {
public:
using response_type = TResponse;
};
class request1 : public request<int> {};
class mediator {
public:
template<typename TRequest,
typename TResponse = typename TRequest::response_type>
TResponse send(const TRequest& r) { /* ... */ }
};
// usage:
mediator m{};
request1 r{};
auto x = m.send(r); // x is inferred `int`
最佳答案
将模板参数公开为 typedef 通常很有用:
template <typename TResponse>
class request {
public:
using ResponseType = TResponse;
}
然后,要从TRequest
中获取您想要的类型,您只需编写typename TRequest::ResponseType
;成员名称将在基类中找到。
关于c++ - 如何获取基类的模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48161321/