2015-10-15 73 views
1

有什么方法可以使用我自己的sincos函数代替::std::sin::std::cosglm::rotate(...)中调用?在glm中使用“custom”sin和cos :: rotate

我能想到的唯一的办法,是使用宏来代替std命名空间内sincos符号,但我真的不希望这样做。

+0

为什么? “sin”或“cos”的定义最近有变化吗?你真的认为你能比标准库做得更好吗?基于什么理由? – EJP

+1

@EJP:我发现这些评论令人讨厌 - 我并不是想要攻击你,但每次我提出一个非常“低级”的优化问题时,总是有人不理会这个问题,只是说“不这样做”。我正在试验sprite批处理和性能关键循环,我想测量(sintable + cos表),(sin/cos表)和(std sin cos)之间的性能差异。不,罪和cos的定义最近没变。不,我认为我不能“比标准图书馆做得更好”。我只是想实验和衡量 –

+0

也许你真的对我的动机很好奇,但是你的评论给我的印象是“看起来,另一个愚蠢地认为自己能比标准图书馆做得更好的家伙!”* –

回答

3

使用LD预加载将起作用。

我会用一个小例子来解释。

假设,这是我们主要的代码...

int main() 
{ 
    std::cout<< std::sin(1000); 
    return 0; 
} 

,如果我编译并运行它,它应该打印0.82688

现在我定义自己的罪

mysin.hpp

extern "C" 
{ 
    double sin(double); 
} 

mysin.cpp

#include "mysin.hpp" 

double sin(double in) 
{ 
    return in + 10;//do you computation here 
} 

现在编译它作为一个共享库

g++ -O2 -c -fPIC mysin.cpp -o mysin.o 
g++ -shared -Wl,-soname,libmysin.so mysin.o -o libmysin.so 

假设原始程序被编译为 “a.out的”。运行它与我们的库预装

LD_PRELOAD=./libmysin.so ./a.out 

现在结果将是“1010”。