air*_*ris 4 c++ templates variadic-templates c++11
我想做一些类似于下面的代码的事情,只是我不想实现func()两次,因为它会是相同的实现。你有什么建议如何实现这一点吗?
template <typename First, typename... Rest>
class Base : public Base<Rest...> {
public:
using Base<Rest...>::func;
void func(First object) {
// implementation
}
};
template <typename First>
class Base<First> {
public:
void func(First object) {
// implementation
}
};
struct X {};
struct Y {};
struct Z {};
class Derived : public Base<X, Y, Z> {};
// ...
Derived d;
d.func(X{});
d.func(Y{});
d.func(Z{});
Run Code Online (Sandbox Code Playgroud)
使用多重继承和附加using指令:
template <typename First, typename... Rest>
struct Base : Base<First>, Base<Rest...> {
using Base<First>::func;
using Base<Rest...>::func;
};
template <typename First>
struct Base<First> {
void func(First object) {/*...*/}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |