我正在尝试重载插入操作符'<<<&#简化使用特定软件所需的语法。该软件实现了一个包含各种类型数据的哈希对象,因此无法在编译时进行类型检查,因为在运行时才知道给定表达式的RHS类型。这个哈希在精神上与Boost Property Trees非常相似。
我正在尝试将其写为模板函数以从哈希中提取数据。只要接收变量已经存在(初始化),这就可以正常工作。如果在变量初始化期间使用它,则无法编译。
因此,编译并正常工作。
int value;
value << data;
但这根本不能编译。
int value << data;
真正的代码非常庞大和复杂,因此我编写了以下简化程序来展示相同的行为。
我正在使用gcc版本4.3.4。不能选择不同的编译器。
感谢任何和所有帮助。
#include <iostream>
/**
* Simple class to use with the templates.
*/
class Data
{
public:
Data ()
{
m_value = 0;
}
Data (int val)
{
m_value = val;
}
~Data ()
{
}
int value ()
{
return (m_value);
}
int value (int val)
{
m_value = val;
return (value ());
}
private:
int m_value;
};
/**
* Assign data from RHS to LHS.
*/
template <class T>
void operator<< (T &data, Data &node)
{
data = node.value ();
}
/**
* Simple test program.
*/
int main (int argc, char *argv[])
{
// initialize the data
Data data (123);
std::cout << data.value () << std::endl;
// extract the data and assign to integer AFTER initialization
int value;
value << data;
std::cout << value << std::endl;
// extract the data and assign to integer DURING initialization
// *** problem is here ***
int other << data; // <-- this fails to compile with...
// expected initializer before '<<' token
std::cout << other << std::endl;
return (0);
}
答案 0 :(得分:3)
int value << data;
没有语法意义。
将<<
视为与任何其他运算符一样,而非+=
。是的,<<
被重载但它仍然必须遵循与其自然化身相同的语义作为按位移位。
int value += 3;
也没有任何意义。
答案 1 :(得分:0)
int value << data;
无效C ++。