想象一下MyTextClass
是一个自定义类,在这种情况下会将传递的const char "Hello stackoverflowers"
保存到std::vector<char>
中:
class MyTextClass{
private:
std::vector<char> storage;
public:
MyTextClass(const char* _passedchars) //constructor
}
使用类似上面代码的内容,我想通过向其传递文本来初始化MyTextClass
的实例:
MyTextClass textholder("Hello stackoverflowers");
如果我在=
{/ p>}中重载MyTextClass
运算符,甚至可以执行以下操作:
MyTextClass textholder = "Hello stackoverflowers";
问题变得弄清楚MyTextClass
构造函数的定义应该是什么样子。我这样说是因为虽然接收const char
的构造函数没有问题直接作为"Hello stackoverflowers"
之类的文本传递,但这是一个数组,因此它的长度是:
1)不能提前设计(因为它是未知长度的传递文本);
2)也没有在构造函数中找到(因为sizeof(_passedchars)/sizeof(_passedchars[0])
只会评估指针的大小;
3)并且未使用std::size
或使用std::begin
和std::end
检索,因为const char
没有实现。{/ p>
如果没有这些信息,我就无法弄清楚如何将const char
构造函数的_passedchars
参数MyTextClass
转换为内部std::vector<char>
我在上面的代码示例中调用了storage
。
因此,在想要创建自己的char文本类的情况下,如何将传递的const char
转换为函数内的std:vector<char>
?
答案 0 :(得分:1)
您可以使用strlen
来确定C风格字符串的长度。
或者,您可以将参数类型更改为std::string
,并使用其size
或length
函数来获取字符串的长度。
答案 1 :(得分:0)
要使用这个确切的构造函数声明,您可以编写(在标题的类定义中):
GrandParent
(注意:MyTextClass(const char* _passedchars)
: storage( _passedchars, _passedchars + strlen(_passedchars) )
{
}
需要#include <string.h>
。)
但是字符串文字实际上是一个数组。通过接受指针,您丢失了已有的长度信息。所以你可以把构造函数改为:
strlen
在后一种情况下,您可以使用template<size_t N>
MyTextClass( const char (&passed)[N] )
: storage( passed, passed + N - 1 )
{
}
代替。