【发布时间】:2018-11-26 07:38:12
【问题描述】:
我正在尝试获得与 C++ 类等效的 C#,我对 C++ 有非常非常基础的知识,所以如果这真的可能的话,我想知道。我尝试了一些东西,但我被卡住了。因此,如果您可以帮助我将这个 c++ 类“解析”为 c#,并解释一下您是如何做到的,或者提供一些可以帮助我的链接。 (或者给我一个在我的 c# 项目中使用这个 c++ 类的提示(如果可能因为托管/非托管代码等,idk。)
C++ 类:
class GameString
{
public:
GameString (GameString const&) = delete;
GameString& operator=(GameString const&) = delete;
GameString (const std::string &str)
: _buf (8)
{
append (str);
setHeader (1, length ());
}
GameString& operator+=(const std::string &str)
{
append (str);
setHeader (1, length ());
return *this;
}
std::size_t length ()
{
return _buf.size () - 8;
}
char *str ()
{
return reinterpret_cast<char*>(_buf.data () + 8);
}
private:
std::vector<unsigned char> _buf;
void append (const std::string &str)
{
for (auto &c : str)
{
_buf.push_back (c);
}
}
void setHeader (std::size_t ref, std::size_t len)
{
memcpy (&_buf[0], &ref, 4);
memcpy (&_buf[4], &len, 4);
}
};
C#类:
class GameString
{
private List<char> _buf = new List<char>(8);
public GameString(string str)
{
Append(str);
SetHeader(1, Length());
}
private void Append(string str)
{
foreach (char c in str)
{
_buf.Add(c);
}
}
public int Length()
{
return _buf.Count - 8;
}
public string Str()
{
// return new String(_buf.ToArray());
}
private void SetHeader(int rf, int length)
{
// memcpy(&_buf[0], &ref, 4);
// memcpy(&_buf[4], &len, 4);
}
}
感谢您的帮助
【问题讨论】:
-
如果你能从 c# 类中详细说明你需要的行为,这可能会有所帮助。
-
看起来你基本上是在问应该如何实现
Str()。对吗? -
是的,这就是我正在寻找的,我试图从 str() 方法以及如何在 C# 中创建 SetHeader() 方法获得相同的结果,因为它可能会更改值我不能忽视它。
标签: c# c++ visual-c++