【发布时间】:2019-04-28 21:07:30
【问题描述】:
尝试编译这段代码会导致错误。
template <typename T>
struct MyClass;
template <typename T, std::size_t sz>
struct MyClass<T> {
static void print() {
std::cout << "Partially specialized" << std::endl;
}
};
错误:模板参数在部分特化中不可推导出
尝试使推断sz 成为可能解决了这个问题。例如:
template <typename T, std::size_t sz>
struct MyClass<T[sz]> {
static void print() {
std::cout << "Partially specialized" << std::endl;
}
};
我的问题是,编译器如何解释这样的程序以及不允许使用第一个结构的原因是什么?
进一步说明:
我在想,如果初始代码是可编译的,我们可以以如下方式使用它:MyClass<int, 4>::print()。
【问题讨论】:
标签: c++11 templates c++14 metaprogramming