C++ 用define替换函数的两个调用
我想替换将Qt4中的C++ 用define替换函数的两个调用,c++,qt,macros,C++,Qt,Macros,我想替换将Qt4中的QString转换为char*的流程: str.toLatin1().data() 与Qt3中的相同: str.latin() 使用一些结构作为: #define toLatin1().data() latin() 真的吗?还有其他方法吗?我想说,最可维护的解决方案是为它引入一个功能: inline const char* qstringToLatinChar(const QString &str) { #if Qt4 return str.toLatin1
QString
转换为char*
的流程:
str.toLatin1().data()
与Qt3中的相同:
str.latin()
使用一些结构作为:
#define toLatin1().data() latin()
真的吗?还有其他方法吗?我想说,最可维护的解决方案是为它引入一个功能:
inline const char* qstringToLatinChar(const QString &str)
{
#if Qt4
return str.toLatin1().data();
#else
return str.latin();
#endif
}
即使使用
sed
等,这样的功能也可以在现有的代码站点上快速替换。它还有一个额外的好处,就是为操作引入一个有意义的名称。我想说,最可维护的解决方案是为它引入一个函数:
inline const char* qstringToLatinChar(const QString &str)
{
#if Qt4
return str.toLatin1().data();
#else
return str.latin();
#endif
}
即使使用
sed
等,这样的功能也可以在现有的代码站点上快速替换。它还有一个额外的好处,就是为操作引入一个有意义的名称。我想说,最可维护的解决方案是为它引入一个函数:
inline const char* qstringToLatinChar(const QString &str)
{
#if Qt4
return str.toLatin1().data();
#else
return str.latin();
#endif
}
即使使用
sed
等,这样的功能也可以在现有的代码站点上快速替换。它还有一个额外的好处,就是为操作引入一个有意义的名称。我想说,最可维护的解决方案是为它引入一个函数:
inline const char* qstringToLatinChar(const QString &str)
{
#if Qt4
return str.toLatin1().data();
#else
return str.latin();
#endif
}
即使使用
sed
等,这样的功能也可以在现有的代码站点上快速替换。它还有一个额外的好处,就是为操作引入了一个有意义的名称。为什么不编写一个函数,让您对拉丁语(str)执行?@juanchopanza,只是因为某个时刻我想切换到Qt4并摆脱变通方法。这样做没有好办法#define
左侧需要一个标识符-里面不能有括号和句号。您可以进行替换,插入一个代理对象,该代理对象的.data()
函数返回所需的QByteArray
,但您需要在QString
和您的代理之间引入一个运算符,然后优先级规则将意味着该代码,如str.toLatin1().data().xyz()
会变成类似于str.latin()*Helper().data().xyz()
-问题是.xyz()
会在操作符*
允许Helper
捕获QByteArray
之前被调用。谢谢,我想,我不应该尝试使用define
编写函数并在函数内部切换,而不是在整个代码中切换。变革应该是孤立的。宏几乎总是一个不好的选择。为什么不编写一个函数,让你对拉丁语(str)
执行?@juanchopanza,只是因为我想在某个时刻切换到Qt4并摆脱变通方法,这不是一个好方法#define
左侧需要一个标识符-里面不能有括号和句号。您可以进行替换,插入一个代理对象,该代理对象的.data()
函数返回所需的QByteArray
,但您需要在QString
和您的代理之间引入一个运算符,然后优先级规则将意味着该代码,如str.toLatin1().data().xyz()
会变成类似于str.latin()*Helper().data().xyz()
-问题是.xyz()
会在操作符*
允许Helper
捕获QByteArray
之前被调用。谢谢,我想,我不应该尝试使用define
编写函数并在函数内部切换,而不是在整个代码中切换。变革应该是孤立的。宏几乎总是一个不好的选择。为什么不编写一个函数,让你对拉丁语(str)
执行?@juanchopanza,只是因为我想在某个时刻切换到Qt4并摆脱变通方法,这不是一个好方法#define
左侧需要一个标识符-里面不能有括号和句号。您可以进行替换,插入一个代理对象,该代理对象的.data()
函数返回所需的QByteArray
,但您需要在QString
和您的代理之间引入一个运算符,然后优先级规则将意味着该代码,如str.toLatin1().data().xyz()
会变成类似于str.latin()*Helper().data().xyz()
-问题是.xyz()
会在操作符*
允许Helper
捕获QByteArray
之前被调用。谢谢,我想,我不应该尝试使用define
编写函数并在函数内部切换,而不是在整个代码中切换。变革应该是孤立的。宏几乎总是一个不好的选择。为什么不编写一个函数,让你对拉丁语(str)
执行?@juanchopanza,只是因为我想在某个时刻切换到Qt4并摆脱变通方法,这不是一个好方法#define
左侧需要一个标识符-里面不能有括号和句号。您可以进行替换,插入一个代理对象,该代理对象的.data()
函数返回所需的QByteArray
,但您需要在QString
和您的代理之间引入一个运算符,然后优先级规则将意味着该代码,如str.toLatin1().data().xyz()
会变成类似于str.latin()*Helper().data().xyz()
-问题是.xyz()
会在操作符*
允许Helper
捕获QByteArray
之前被调用。谢谢,我想,我不应该尝试使用define
编写函数并在函数内部切换,而不是在整个代码中切换。变革应该是孤立的。宏几乎总是一个糟糕的选择。谢谢!很有趣,谢谢!很有趣,谢谢!很有趣,谢谢!非常有趣。