gpt4 book ai didi

c++ - 处理 C++ 模板中的引用

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

我目前有一个函数模板,采用引用,本质上相当于:

template <typename T>
void f(T& t)
{
t = T();
}

现在,我可以调用:

int a;
f(a);

初始化我的变量a。我什至可以:

std::vector<int> a(10);
f(a[5]);

但是,这会失败:

std::vector<bool> a(10);
f(a[5]);

原因是a[5]返回具有引用语义的对象,但不是引用。所以我需要能够写:

template <typename T>
void f(T a)
{
a = T();
}

但是如果我添加这个新模板并尝试编译第一个示例(使用 int),我会收到以下错误:

test_multi_tmpl.cc: In function ‘int main()’:
test_multi_tmpl.cc:20: error: call of overloaded ‘f(int&)’ is ambiguous
test_multi_tmpl.cc:6: note: candidates are: void f(T&) [with T = int]
test_multi_tmpl.cc:12: note: void f(T) [with T = int]

有什么解决办法吗?我不想重载 f只为 std::vector<bool>::reference因为这个结构可能出现在其他地方......

最佳答案

我认为 f 专用于 std::vector<bool>::reference是您唯一的选择。

请注意,使用 std::vector<bool>首先可能是个坏主意(std::vector<bool> 特化在 c++ 语言的 future 版本中被弃用)所以你可以只使用 std::deque<bool>相反。

关于c++ - 处理 C++ 模板中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1916813/

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