【发布时间】:2016-04-15 06:16:58
【问题描述】:
我希望使用模板重构一些代码。我知道我可以使用宏轻松完成,但更喜欢模板/内联 lambda。它应该在功能上是等效的。
代码如下:
static const Name AssetName = Name(TEXT("AssetName"));
AssetPtr = (AssetPtrType*)GetAssetFromName(AssetName);
if (!AssetPtr)
return false;
静态常量等非常重要,优化因为这个函数可以调用一千次,并且有很多资产要加载。那么我该如何概括呢?:
#define LOAD_ASSET(AssetName, AssetPtr, AssetPtrType)
LOAD_ASSET(CoolTexture, this->CoolTexture, Image)
LOAD_ASSET(CoolModel, this->CoolModel, Mesh)
我可以使用最新的 MSVC 支持的任何 C++11/14/etc 函数。
【问题讨论】:
-
请告诉我重构这段代码的好处? PS:我认为宏将是错误的方式
-
只是澄清一下,变量
AssetName是否实际上对所有不同的资产都有不同的名称?此外,您说您将加载数千个资产,但您会在程序运行时执行此操作,还是仅在开始时执行此操作?你会重新加载资产吗?您会在加载之外的任何其他地方重用AssetName变量吗?static const部分对我来说似乎是过早的优化,你有没有对它进行基准测试并测量它是一个主要瓶颈? -
对我来说,你的问题还不清楚。是这样吗,您希望将
LOAD_ASSET替换为其他内容(可能是您的第一个代码sn-p)。你问是否使用宏或模板?你打算如何使用这个实用程序? -
令我惊讶的是,创建名称似乎是一项昂贵的操作,以至于您想使用静态变量对其进行优化,但实际上加载资产并非如此。
-
TEXT和Name是什么?
标签: c++ templates c++11 macros