1 c++ templates template-meta-programming
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) { /* ... */ }
};
Run Code Online (Sandbox Code Playgroud)
这样我就可以做到:
mediator m{};
request1 r{};
int x = m.send(r);
Run Code Online (Sandbox Code Playgroud)
编辑: 谢谢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`
Run Code Online (Sandbox Code Playgroud)
将模板参数公开为typedef通常很有用:
template <typename TResponse>
class request {
public:
using ResponseType = TResponse;
}
Run Code Online (Sandbox Code Playgroud)
然后,为了得到你想要的类型TRequest,你可以写typename TRequest::ResponseType; 成员名称将在基类中找到.
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |