我正在编写一个类,我已经完成了可以混合我的类类型对象和C ++文字的操作,但仅限于一个方向。
这是一个简化的代码,显示了这个想法:
for ($i = 1; $i < count($csvarray); $i++) {
array_multisort(array_column($csvarray, $i), SORT_DESC,
$csvarray, SORT_DESC);
echo "<pre>";
print_r($csvarray);
echo "</pre>";
}
如你所见,我可以做类似的事情:
#include <iostream>
#include <string>
using namespace std;
class CLS
{
string str;
public:
CLS(const char* param)
{ str = param; }
CLS operator+(const CLS& rhs)
{
str = str + rhs.str;
return *this; }
friend ostream& operator<<(ostream& out, const CLS& rhs);
};
ostream& operator<<(ostream& out, const CLS& rhs)
{
out << rhs.str;
return out; }
int main()
{
CLS a("\n Hello ");
CLS b("bye!\n\n");
cout << a + "World!\n\n";
//cout << "\n Good " + b; /* this is not possible because of the operands order */
}
但不是,
a + "W";
如代码的最后一行所示。
我理解原因。
第一个相当于:
"W" + a;
这是我班上的。然而,第二个是,
a.operator+("W");
没有被覆盖,文字本身不是我理解的类的对象。因此,整体表达不可能。
我知道我可以创建用户定义的文字,但这不是我想要做的。 (虽然我不确定他们是否会工作)。
我找不到任何我想在这个网站上有关的提示浏览问题,我无法在网上找到与我的问题相关的内容。
我的问题:
有没有办法让这两种订单都有效?
答案 0 :(得分:4)
此代码:
cout << "\n Good " + b; /* this is not possible because of the operands order */
不起作用,因为您创建了operator+
成员(而不是const成员)。如果你把它重写为独立函数(可能是朋友),那么这个问题就会消失:
friend
CLS operator+(const CLS& lhs, const CLS& rhs)
{
CLS r;
r.str = lhs.str + rhs.str;
return r;
}
如果你创建了接受const std::string &
的额外ctor,它会更简单:
friend
CLS operator+(const CLS& lhs, const CLS& rhs)
{
return CLS( lhs.str + rhs.str );
}
请注意,您应该以这种方式重写现有的构造函数:
CLS(const char* param) : str( param )
{}
它更清洁,更有效
答案 1 :(得分:2)
您可以添加全局功能:
$objPHPPowerPoint->getLayout()->setDocumentLayout(['cx' => 1280, 'cy' => 700], true)
->setCX(1280, DocumentLayout::UNIT_PIXEL)
->setCY(700, DocumentLayout::UNIT_PIXEL);`