变分模板和宏
Variadic Templates and Macros
我目前正在开发一个opengl包装器,但visual-c++似乎不接受此代码:
#pragma once
#include <cassert>
#include <GL/glew.h>
namespace Spiky {
namespace GLLayer {
template <typename RV, typename ... Params>
inline auto _checked_glFunc(
RV (GLAPIENTRY *pfn)(Params...),
const char*) -> decltype(pfn)
{
return pfn;
}
template <typename RV, typename ...ARGS>
inline auto _checked_glFunc(RV (* GLAPIENTRY *ppfn)(ARGS...),
const char* func_name)
-> decltype(*ppfn)
{
assert(!ppfn || !*ppfn, "Invalid GLFunction !");
return *ppfn;
}
#define SPIKY_GLFUNC(FUNCNAME)
::Spiky::GLLayer::_checked_glFunc(&::gl##FUNCNAME, ##FUNCNAME)
} //namespace GLLayer
} //namespace Spiky
main.cpp:
//includes..
int main(int argc, char** args)
{
GLuint* names;
SPIKY_GLFUNC(GenBuffers)(1, names); //gl call test
return EXIT_SUCCESS;
}
Visualc++实际上给我的错误GenBuffers是未定义的!
有什么建议吗?
编辑
如前所述,宏中存在错误(见答案);但现在我得到了这个错误:严重性代码描述项目文件行错误C2784"未知类型Spiky::GLLayer::_checked_glFunc(RV(__cdecl**)(ARGS…),const char*
有什么建议吗?
您将空令牌连接两次。相反,您需要第二次字符串化,这是用#
运算符完成的:
#define SPIKY_GLFUNC(FUNCNAME)
::Spiky::GLLayer::_checked_glFunc(&::gl##FUNCNAME, #FUNCNAME)
// ^^^
相关文章:
- 没有找到相关文章