【发布时间】:2016-03-10 16:53:46
【问题描述】:
考虑以下代码:
template<typename>
struct S { };
template<typename, typename>
struct B;
template <typename R, typename... Args, template<class> class C>
struct B<R(Args...), C<R>> {
void f() { }
};
int main() {
B<void(), S<void>> b;
b.f();
}
它可以编译并且没有问题。
无论如何,当一个人决定使用B时,它必须提供两种类型。
我想要实现的是以某种方式默认第二个参数(我知道,部分专业化不接受其参数的默认值)并让用户将其类型定义为 B<void()> 而不是 B<void(), S<void>>。
不幸的是,由于模板模板、部分特化和参数之间存在的依赖关系,它们共同导致了一个我在几个小时以来一直在努力解决的难题。
有什么聪明的解决办法吗?
到目前为止,我已经能够用中间结构解决它,但是我不太喜欢它......
【问题讨论】:
标签: c++ templates c++11 template-specialization partial-specialization