gpt4 book ai didi

c++ - 为具有不同大小的非类型参数的模板重载 operator+=

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:18 24 4
gpt4 key购买 nike

在我之前的question (不要问我为什么要创建一个新帐户)我问我的测试类是否正在创建一个 VLA。 answerer还提出了这一点:

One (potentially significant) wrinkle is that string_test<T, m> and string_test<T, n> are different types when m != n.

我可以通过创建一个将大小相加的新 string_test 轻松解决此问题。但对于 operator+= 这不起作用,因为大小(更准确地说,私有(private)数据成员 buffer[n] )无法更改。

template <typename U, size_t m>
string_test<T, m + n> operator+(const string_test<U, m>& rhs)
{
char tmp[n + m]; // not VLA, size known at compile-time
strcpy(tmp, _buffer);
strcat(tmp, rhs._buffer);
return make_string(tmp);
}

operator+=应该返回一个引用和 *this .什么是实现方式 operator+=

最佳答案

通过将大小与类型分开,您已经告诉您的类的用户字符串的大小是静态的(即不能更改)。这个问题类似于一个简单的 C 风格数组 (int x[n])。元素不能添加到数组中,相反,必须创建一个新的缓冲区来容纳先前的元素和额外的元素。

标准 C++ 数组类 std::array<T, N> 以相同的方式实现,但它不提供任何会增加大小的插入操作,因为它只是一个静态大小数组的包装器。

关于c++ - 为具有不同大小的非类型参数的模板重载 operator+=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879482/

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