c++ 为什么在那个例子中没有函数模板匹配具有不同返回类型的函数模板专用化?

q8l4jmvw  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(169)

为什么在尝试为显式模板专用化设置不同的返回值而不是auto时会出现编译错误?为什么会出现编译错误:

template <size_t T>
auto Get() = delete;

template <>
auto Get<0>(){
    return 5;
}

std::string str = "Hello world!";

template <>
std::string const & Get<1>() {
    return str;
}

int main() {
    func_employee();

    return 0;
}
aiqt4smr

aiqt4smr1#

在你的例子中,auto Get()是函数签名,它与模板参数无关。如果你想显式地指定返回类型,你必须为它添加一个相应的参数:

template <size_t S, typename R>
R Get() = delete;

在这种情况下,模板专用化可以保持不变,但auto返回类型不再有意义,因为我不知道如何使用它来示例化模板,所以您可能希望将其替换为所需的整型:

template <>
int Get<0>(){
    return 5;
}

最后,函数模板不会根据返回类型推导出它的参数,所以在这种情况下,你必须显式地指定它:

auto integral = Get<0, int>();
auto string = Get<1, std::string const &>();

相关问题