首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有不同大小的非类型参数的模板重载operator+=

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

Stack Overflow用户
提问于 2014-09-16 22:35:22
回答 1查看 48关注 0票数 2

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

一个(潜在重要的)问题是,string_test<T, m>string_test<T, n>m != n时是不同的类型。

我可以通过创建一个大小相加的新string_test来轻松地修复这个问题。但是对于operator+=,这是行不通的,因为大小(更准确地说,私有数据成员buffer[n])不能改变。

代码语言:javascript
运行
复制
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+=的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-16 22:52:41

通过使类型的大小分开,您已经告诉您的类的用户,字符串的大小是静态的(即不能更改)。这个问题类似于一个简单的C样式数组(int x[n]).不能将元素添加到数组中,而是必须创建一个新的缓冲区,该缓冲区可以容纳前面的元素+额外的元素。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25879482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档