MyBuffer g-6ren">
gpt4 book ai didi

C++推导模板函数返回类型被隐式调用

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:33 25 4
gpt4 key购买 nike

我使用 C++0X。我有一个带有模板返回类型的模板函数:

MyBuffer<10> buf = "1234567890";

template< class T >
T getVal();

template<>
MyBuffer<5> getVal<MyBuffer<5>>()
{
return MyBuffer<5>(buf.data());
}

template<>
MyBuffer<10> getVal<MyBuffer<10>>()
{
return buf;
}

因此,在一种情况下,它会在秒内返回 5 个符号 - 10。我可以通过以下方式使用它:

MyBuffer<5>  fiveChars = getVal<MyBuffer<5>>();
MyBuffer<10> tenChars = getVal<MyBuffer<10>>();

但是我想知道:我可以简化调用,例如,通过以下方式:

MyBuffer<5> fiveChars = getVal();
MyBuffer<10> tenChars = getVal();

当然我遇到了编译器错误。

所以我的问题:是否可以以某种方式声明我的模板以能够使用最后一个代码片段?我没有指定 getVal 模板类型,但编译器应该看到,我将它分配给了具有模板特化的具体类型。

最佳答案

首先,您不能从 C++ 中的返回类型推导出任何模板参数。

如果你想减少代码量,我建议使用某种包装器:

template<int n>
MyBuffer<n> get()
{
return getVal<MyBuffer<n>>();
}

而不是:

MyBuffer<5> fiveChars = getVal<MyBuffer<5>>();

只需使用:

auto fiveChars = get<5>();
auto tenChars = get<10>();

关于C++推导模板函数返回类型被隐式调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45078729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com