相关疑难解决方法(0)

C++可以编译内联函数指针吗?

假设我有一个functionProxy带有泛型参数的函数function并调用它operator():

template< typename Function > void functionProxy( Function function ) {
    function();
}
Run Code Online (Sandbox Code Playgroud)

传递给它的对象可能是:


int main( )
{
    functionProxy( Functor() );
    functionProxy( function );
    functionProxy( [](){ std::cout << "lambda!" << std::endl; } );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器将能够内联function中 …

c++ compiler-construction optimization inline function

27
推荐指数
1
解决办法
9959
查看次数

这是GCC中的错误吗?

编辑:这不是一个错误,只是我不知道模板化基类中的依赖名称查找(MSVC"有帮助"解决没有错误).


我前段时间写了一个functor实现,还有一个使用它的简单"Event"包装器.它在MSVC下编译得很好,但GCC给出了基类中成员变量的错误subscribers,没有被声明; 改变subscribersthis->subscribers解决问题(!).它似乎只发生在奇怪的重复模板模式和部分模板专业化.

简化的来源(对于令人费解的模板使用感到抱歉......):

#include <vector>

template<typename TEvent>
struct EventBase
{
protected:
        std::vector<int> subscribers;
};

template<typename TArg1 = void, typename TArg2 = void>
struct Event : public EventBase<Event<TArg1, TArg2> >
{
        void trigger(TArg1 arg1, TArg2 arg2) const
        {
                // Error on next line
                auto it = subscribers.cbegin();
        }
};

template<typename TArg1>
struct Event<TArg1, void> : public EventBase<Event<TArg1> >
{
        void trigger(TArg1 arg1) const
        {
                // Using `this` fixes error(?!)
                auto it = …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates visual-c++ name-lookup

6
推荐指数
1
解决办法
373
查看次数

通过使用函数指针在游戏引擎数学库中使用 SIMD ~ 好主意吗?

我从 14 岁起就开始阅读游戏引擎书籍(当时我什么都不懂:P)现在很多年后我想开始为我的游戏引擎编写数学基础。我一直在思考如何设计这个“图书馆”。(我的意思是“有组织的文件集”)每隔几年就会出现新的 SIMD 指令集,我不希望它们被浪费。(请告诉我我是否错了。)

我希望至少具有以下属性:

  • 使其能够在运行时检查是否有 SIMD,如果有则使用 SIMD,如果没有则使用普通的 C++ 版本。(可能会有一些调用开销,这值得吗?)
  • 如果我们在编译时已经知道目标,则可以针对 SIMD 或普通 C++ 进行编译。这些调用可以内联并适合交叉优化,因为编译器知道是使用 SIMD 还是 C++。

编辑 - 我想让源代码可移植,这样它也可以在其他设备上运行,然后是 x86(-64)

所以我认为使用函数指针是一个很好的解决方案,我将其设置为静态并在程序开始时初始化。以及适合的函数(例如矩阵/向量的乘法)将调用的函数。

您认为这种设计的优点和缺点是什么(哪个更重要?)?是否有可能创建具有上述两种属性的它?

基督教

c++ function-pointers simd game-engine

3
推荐指数
1
解决办法
1018
查看次数