C++ 用define替换函数的两个调用

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

我想替换将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().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
编写函数并在函数内部切换,而不是在整个代码中切换。变革应该是孤立的。宏几乎总是一个糟糕的选择。谢谢!很有趣,谢谢!很有趣,谢谢!很有趣,谢谢!非常有趣。