我有这个函数:
function AddImpulse(Vector2D impulse)
{
`log("ADD IMPULSE: " $ impulse);
}问题是我得到了这样的错误:“正确的类型与'$‘不兼容。似乎,尽管内置的向量类会自动转换为字符串,但Vector2D类只是一个内置的结构,没有任何操作符重载或自动转换。
static final operator(40) string $ (string A, Vector2D B)
{
return A $ string(B.x) $ ", " $ string(B.y);
}有没有一种方法可以做到这一点,这样我就不需要每次都这样做:
`log("ADD IMPULSE: " $ impulse.x $ "," $ impulse.Y);虽然这在Vector2D的情况下还不错,但对于较大的结构或类,这将变得很麻烦。
发布于 2013-05-27 03:35:21
不幸的是,在UnrealScript中进行泛型编程的选择是有限的。一种选择可能是将运算符重载放在一个包含文件中,并使用`include宏将其包含在需要它的每个类中。
如果这不起作用,另一种选择可能是使用宏调用特殊类中的静态函数来处理结构到字符串的转换。
首先,在代码包的根文件夹中创建一个Globals.uci文件。Globals.uci是一个特殊文件,编译器会自动将其包含在与其关联的包中的所有UncrealScript文件中。如果您的包名为MyPackage,Globals.uci将位于开发/Src/MyPackage/Globals.uci中。它应该紧挨着你的包的Classes文件夹。
将宏放入Globals.uci:
`define toString(type,name) class'MyStructConversions'.static.`{type}ToString(`{name},"`{name}")将您的转换函数放在MyStructConversions.uc中:
class MyStructConversions;
static function string Vector2DToString (const out Vector2D A, string varname)
{
return varname $ ": (" $ A.X $ ", " $ A.Y $ ")";
}现在,当您从包中的任何位置调用`toString(Vector2D, impulse)时,宏将在编译时被替换为对Vector2DToString函数的调用。然后,您可以通过向MyStructConversions.uc添加适当的定义来支持更多的结构类型,并且toString宏将与它们无缝协作。
有关UnrealScript preprocessor的文档包含有关`include和其他宏的更多信息。查看开发/源/核心中的Globals.uci,也可以获得一些有用的示例。
https://stackoverflow.com/questions/16752788
复制相似问题