可以转换C#get,将代码设置为C++;
我在C#中有以下代码: 是否可以将其转换并以这种方式使用get和set?我知道您不能这样声明,我需要“:”来声明,但当我尝试这样做时:可以转换C#get,将代码设置为C++;,c#,c++,visual-studio-2010,visual-c++,C#,C++,Visual Studio 2010,Visual C++,我在C#中有以下代码: 是否可以将其转换并以这种方式使用get和set?我知道您不能这样声明,我需要“:”来声明,但当我尝试这样做时: public: std::string Temp { get { return sTemp; } set { sTemp = value; this.ComputeTemp(); } 我收到的错误出现在第一个
public:
std::string Temp
{
get { return sTemp; }
set {
sTemp = value;
this.ComputeTemp();
}
我收到的错误出现在第一个“{”上,说明
应为“;”
。有没有关于如何修复它的建议?是否使用C++/CLI?如果是,则这是属性语法
public:
property std::string Temp {
std::string get() { return sTemp; }
void set(std::string value) { sTemp = value; this->ComputeTemp(); }
}
如果你想使用普通C++,那么你就不走运了。对于普通C++代码来说,没有等价的特征。你需要求助于GETER和SETTER方法< /P>
public:
std::string GetTemp() const { return sTemp; }
void SetTemp(const std::string& value) {
sTemp = value;
this->ComputeTemp();
}
要从类似问题复制粘贴我的答案,请执行以下操作: 警告:这是一种开玩笑的反应,太可怕了!!! 是的,有点可能:)
public:
__declspec(property(get=get_Temp, put=set_Temp)) std::string Temp;
const std::string& get_Temp { return sTemp; }
void set_Temp(std::string value) {
sTemp = std::move(value);
this->ComputeTemp();
}
请注意,这种方式的属性使类比其他方式稍微大一点be@MooingDuck,正确-但我也建议首先这样做,因此最重要的免责声明是-可以这样做…只是..是的…;)复制
Test
和Test::operator=
的构造是灾难性的。你需要要么正确处理它,要么阻止它。哦,你可以通过简单地放弃
语法来摆脱开销,拥有一个工作的操作符=
。使用静态测试属性文本;
将一个名称引入全局范围,并对操作符^
进行适当的覆盖,你可以得到a^text=“blah”
工作到工作,运行时开销为零。为了增加C#ness,Test*a;a^text
和Test a;a^text
都可以做同样的事情:当语句中有Test
对象时,为什么要存储它,我们只需要一些表达式模板mojo就可以抓住它并使用它!主持人注意:这个问题哈如果您想评论它的准确性,请访问。谢谢。可能重复的。但是,最好直接使用get\u Temp/set\u Temp
,而不使用属性Temp
,因为在访问/修改Temp的地方使用grep更容易。在后一种情况下,标准命名约定对于getter来说似乎是T temp()
,对于setter来说似乎是void temp(T值)
。@codesin混乱我肯定看到了两种方法(Get/Set前缀和no prefix)。我个人的偏好是使用Get/Set前缀,这可能是我早期Java时代遗留下来的
template<typename T>
class Property
{
private:
T& _value;
public:
Property(T& value) : _value(value)
{
} // eo ctor
Property<T>& operator = (const T& val)
{
_value = val;
return(*this);
}; // eo -
operator const T&() const
{
return(_value);
}; // eo ()
};
class Test
{
private:
std::string m_Test;
public:
Test() : text(m_Test)
{
};
Property<std::string> text;
};
Test a;
a.text = "blah";
std::string content = a.text;
public:
__declspec(property(get=get_Temp, put=set_Temp)) std::string Temp;
const std::string& get_Temp { return sTemp; }
void set_Temp(std::string value) {
sTemp = std::move(value);
this->ComputeTemp();
}