在C ++中定义类型转换操作员模板的正确方法是什么

时间:2016-07-06 05:07:21

标签: c++

这里的

this代码是我尝试将模板定义为类型转换或赋值运算符。问题是,在对类型进行类型转换时,这不是在第27行调用类型转换功能模板。

Assigning the object
Returning the object
sec:3
nsec:2

实际输出:

    if (volumeAxis_nParticle1_nerveImpulseShape.age >= volumeAxis_nParticle1_nerveImpulseShape.lifespanPP) 
//if particle age is >= lifespan
{
vector $pos = volumeAxis_nParticle1_nerveImpulseShape.position; 
//determines where the particles are when they die
float $emitNum = 3; 
//determines how many particles will be emitted upon particle death ie 3
for ($i = 0; $i < $emitNum; $i ++) 
// for variable $i, start at 0 and if $i <emitNum then add 1 to it and execute the following commands, but if $i =3, then quit
{ 
vector $randVel = <<rand(-0.5,0.5), -1, rand(-0.5,0.5)>>; 
//determines the direction of the emitted particles in x, y, z
emit -o emitOnDeath_nParticle1_acetylCholine //emit the second particle object
-position ($pos.x) ($pos.y) ($pos.z) //where first particle object dies
-at velocity //now determine velocity
–vv ($randVel.x) ($randVel.y) ($randVel.z); //vector values (vv) for random velocity x, y or z
}; 
};

预期输出:

    if (emitOnDeath_nParticle1_acetylCholineShape.age < emitOnDeath_nParticle1_acetylCholineShape.lifespanPP) 
longMuscleController22.rotateY = 0;
else if (emitOnDeath_nParticle1_acetylCholineShape.age >= emitOnDeath_nParticle1_acetylCholineShape.lifespanPP) 
longMuscleController22.rotateY = -0.1;

类似的情况是在另一个程序中给出类型转换操作符未定义的编译时错误。

2 个答案:

答案 0 :(得分:3)

if(in_array(10, $catIDS)){ echo "exists"; } 很好,但是这样的template <typename T> operator T()只能推断为非引用类型,因此此运算符不会用于转换为类型{{1 }}。相反,您的演员阵容是T,它永远不会执行用户定义的转换。

为了编写可以产生左值的转换运算符,您需要编写timespec&

顺便说一下,你不能取消引用一个void指针。如果您的操作员模板曾被实例化,那么您将收到编译错误。

答案 1 :(得分:2)

typedef struct test_s { int foo; } test; void foo(test *ptr){ return; } // This is ok void foo(const test *ptr){ return; } void foo(test t){ return; } //This is an error void foo(const test t){ return; } 无法使用类型转换操作符,因为您要转换为timespec& t=(timespec&)f;而不是timespec&

你必须实施

timespec

使这项工作。

请不要在C ++模块中使用C风格的强制转换。使用 operator T&(){ cout << "Returning the object." << endl; return *reinterpret_cast<T*>(ts); } static_cast<>dynamic_cast<>和 - 如果您真的需要 - reinterpret_cast<>

我不确定您要实现的目标,但是赋值运算符的以下实现会复制源值,并且应该适用于临时对象,并且类型转换运算符会检查转换是否有效。

const_cast<>