cpgf library

Overview

cpgf library

cpgf library is a cross platform C++ library for callback, reflection, serialization and script binding.

It's written in standard C++ and doesn't require any preprocessor or tools.

Documentations

Documentations

Official website

http://www.cpgf.org/

Version

1.6.1

Libraries

  • cpgf reflection -- a library to add reflection feature to C++.

  • cpgf serialization -- a library to save C++ data and objects to persistent storage and then load back. It's based on the reflection library.

  • cpgf script binding -- a script binding engine to bind Lua (5.3, 5.2 and 5.1), Google V8 JavaScript, Python (2.7.3), and Mozilla SpiderMonkey JavaScript to C++. It's based on the reflection library.

  • cpgf callback -- a callback library to implement signal/slot or callback in C++. It's the primary library for other libraries.

  • cpgf meta data collection -- a library with built-in meta data support. Now there are meta data for C++ STL, OpenGL, OpenGLU, OpenGLUT, Box2D physical engine, SFML graphics and multimedia engine and Irrlicht 3D render engine.

  • cpgf meta data generator tool -- a tool writen in Java to automatically generate meta data from Doxygen XML files.

  • cpgf tweening -- a library to implement ease animation in C++.

License

Apache License, Version 2.0 You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Author and owner

Wang Qi, in Beijing, China

Learning the library

Though there are some documentations on the official website, they are far from good. You may understand that developers like coding much more than documenting.

The fastest way to get start with the library is to read the sample code in the folder "samples". The samples cover most features so it's a good kick off.

If you want to read more sample code, read the code in the folder "test". They are for unit test. They are much more difficult to read and use a lot of macros. However, they cover much more functions than the sample code.

A sister project using cpgf

There is a 2D game engine from the cpgf author,

https://github.com/wqking/gincu

The game engine uses cpgf callback, tweening and script binding extensively.

Using the library

  • In the project setting, add an include path pointing to "cpgf/include".
  • Link the source code or link the library in your project.
  • All classes, functions and APIs are in the namespace "cpgf".

Link the source code

To using the library, the easiest way is to just link all .cpp source code under the src and sub folder. However, a build script is also provide to build the code as static library.

Build the library

The library uses CMake as the build system. A makefile is provided to wrap the CMake build. To build the library, open command line terminal, go to folder "build",

The library requires C++ exception and RTTI are enabled.

make PLATFORM

PLATFORM can be one of

nmake mingw linux vc05 vc08 vc10 cb_mingw cb_nmake cb_linux xcode

For detailed PLATFORM information, run "make" without parameter to see the help.

If you are using MSVC, run "nmake" instead of "make".

To build with Lua binding, you must change the variable HAS_LUA and LUA_DIR in build.config.txt to point to the source code of Lua.

To build with Google V8 Javascript binding, you must change the variable HAS_V8 and V8_DIR in build.config.txt to point to the source code of V8.

To build with Python binding, you must change the variable HAS_PYTHON and PYTHON_DIR in build.config.txt to point to the source code of Python.

To build with Mozilla SpiderMonkey binding, you must change the variable HAS_SPIDERMONKEY and SPIDERMONKEY_DIR in build.config.txt to point to the source code of Mozilla SpiderMonkey.

To build the unit test and sample code, feed a second parameter

	make PLATFORM TARGET=TheTarget
TheTarget can be,
TARGET=lib                   Build the library. This is the default if TARGET is omitted.
TARGET=tutorials             Build the tutorials.
TARGET=tests                 Build the unit test.
TARGET=samplereflection      Build the reflection sample application.
TARGET=sampleserialization   Build the serialization sample application.
TARGET=samplelua             Build the Lua binding sample application.
TARGET=sampleopengl          Build the Opengl binding sample application.
TARGET=samplebox2d           Build the Box2D binding sample application.
TARGET=samplesfml            Build the SFML binding sample application.
TARGET=sampleirrlicht        Build the Irrlicht binding sample application.

Compatibility -- Tested compilers and OSes

  • Linux (Ubuntu 18.04), GCC 7.3.0
  • Linux (Ubuntu 18.04, LLVM Clang 5.0.2
  • The below cases were based on the old 1.5 version. Since version 1.6, C++11 compiler is required, and VC 2015 and GCC 4.9.1 were tested.
  • Windows XP, Microsoft Visual C++ 2008 Express and Microsoft Visual C++ 2010 Professional
  • Windows XP, MingW GCC 3.4.2, 4.4.0 and 4.5.2
  • Windows XP, Embarcadero C++ Builder 2010
  • Linux (Ubuntu 11.04 in VirtualBox), GCC 4.5.2
  • Linux (Ubuntu 11.04 in VirtualBox), Intel C++ Compiler Composer XE
  • Mac 10.6.8, GCC 4.4.0

Required third party library -- None for the major libraries

  • For Lua binding, Lua library is required.
  • For Google V8 binding, V8 library is required.
  • For Python binding, Python library is required.
  • For Mozilla SpiderMonkey, Mozilla SpiderMonkey is required.
  • If you want to run the unit test, UnitTest++ is required. But usually you don't need to do that.

Contribute to the library

If you like the library and want to contribute to it, here are some most desired work to do

  • Help with the documentation. I'm not a native English speaker, and I also don't like to write documentation.
  • Test the library on more compilers and platforms.

What does cpgf mean?

The original cpgf means Cross Platform Game Framework. It was intended to be game framework that can work on PC and smart phone. But later the author decided to add more fun but non-game features to the library. So now the library is neither for game nor a framework. It's a cross platform library.

Comments
  • test build fails if configured for the new spidermonkey (and its enabled)

    test build fails if configured for the new spidermonkey (and its enabled)

    tried building for both xulrunner-27.0.1 and mozjs-24.2.0 - the build fails with errors like:

    .../dev/cpgf/test/scriptbind/bind_common.cpp:447:34: error: ‘JSOPTION_METHODJIT’ was not declared in this scope
    .../dev/cpgf/test/scriptbind/bind_common.cpp:447:52: error: ‘JS_SetOptions’ was not declared in this scope
    .../dev/cpgf/test/scriptbind/bind_common.cpp:448:50: error: ‘JS_SetVersion’ was not declared in this scope
    .../dev/cpgf/test/scriptbind/bind_common.cpp: In member function ‘bool testscript::TestScriptContextSpiderMonkey::executeString(const char*, bool) const’:
    .../dev/cpgf/test/scriptbind/bind_common.cpp:521:3: error: ‘JSBool’ was not declared in this scope
    .../dev/cpgf/test/scriptbind/bind_common.cpp:521:10: error: expected ‘;’ before ‘success’
    .../dev/cpgf/test/scriptbind/bind_common.cpp:522:10: error: ‘success’ was not declared in this scope
    .../dev/cpgf/test/scriptbind/bind_common.cpp:522:21: error: ‘JS_TRUE’ was not declared in this scope
    
    opened by svalaskevicius 18
  • Exposing std::string to scripts

    Exposing std::string to scripts

    Hi,

    What's the best way to go about building meta data for std::string and exposing it to scripts? I noticed you've already built meta data for stl vectors and arrays, so I'm curious if you have done anything special for strings?

    When I try to do the following:

    GDefineMetaClass<std::string>
          ::define("STLString")
          ._method("c_str", (typename std::string::value_type* (std::string::*)(void) const)&std::string::c_str);
    

    I get this linker error:

    Undefined symbols for architecture x86_64:
      "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::c_str() const", referenced from:
    

    All I really need is the ability to call c_str() so I can compare them to lua strings easily. I'm working around it for now by defining a function that takes a std::string and returns a const char*, and exposing that function as a global. I'm sorry if this is not the right place to post this type of question.

    opened by krisr 16
  • Possible memory access errors

    Possible memory access errors

    if an object has been deleted by C++ while its still kept in V8 (and cpgf), the V8 GC will cause cpgf to do invalid reads:

        8 ==27206== Invalid read of size 8                                                                    
        9 ==27206==    at 0x4B3B2B8: cpgf::variant_internal::CastFromVariant<void*, cpgf::VarantCastKeepConstRef>::cast(cpgf::GVariant const&) (in cpgf-build/build/libcpgf.so)
       10 ==27206==    by 0x4B4164E: cpgf::bind_internal::getGlueDataInstance(cpgf::GSharedPointer<cpgf::bind_internal::GGlueData> const&) (in cpgf-build/build/libcpgf.so)
       11 ==27206==    by 0x4BA2DB6: cpgf::bind_internal::GScriptObjectCache<cpgf::GSharedPointer<v8::Persistent<v8::Object, v8::NonCopyablePersistentTraits<v8::Object> > > >::                freeScriptObject(cpgf::bind_internal::GGlueDataWrapper*) (in cpgf-build/build/libcpgf.so)
       12 ==27206==    by 0x4B9B7F9: void cpgf::(anonymous namespace)::weakHandleCallback<v8::Object>(v8::Isolate*, v8::Persistent<v8::Object, v8::NonCopyablePersistentTraits<v8::             Object> >*, cpgf::bind_internal::GGlueDataWrapper*) (in cpgf-build/build/libcpgf.so)
       13 ==27206==    by 0x4F6009C: v8::internal::GlobalHandles::PostGarbageCollectionProcessing(v8::internal::GarbageCollector, v8::internal::GCTracer*) (in lib/node/deps/v8/out/native/lib.target/libv8.so)
    
       51 ==27206== Invalid read of size 8                                                                    
       52 ==27206==    at 0x4B3B2B8: cpgf::variant_internal::CastFromVariant<void*, cpgf::VarantCastKeepConstRef>::cast(cpgf::GVariant const&) (in cpgf-build/build/libcpgf.so)
       53 ==27206==    by 0x4B3D458: cpgf::bind_internal::GObjectInstance::~GObjectInstance() (in cpgf-build/build/libcpgf.so)
       54 ==27206==    by 0x4B3DDA8: cpgf::bind_internal::GObjectGlueData::~GObjectGlueData() (in cpgf-build/build/libcpgf.so)
       55 ==27206==    by 0x4B3DD38: cpgf::bind_internal::GObjectGlueData::~GObjectGlueData() (in cpgf-build/build/libcpgf.so)
       56 ==27206==    by 0x4BA3743: cpgf::bind_internal::GGlueDataWrapperImplement<cpgf::GSharedPointer<cpgf::bind_internal::GObjectGlueData> >::~GGlueDataWrapperImplement() (in cpgf-build/build/libcpgf.so)
       57 ==27206==    by 0x4B9B81C: void cpgf::(anonymous namespace)::weakHandleCallback<v8::Object>(v8::Isolate*, v8::Persistent<v8::Object, v8::NonCopyablePersistentTraits<v8::             Object> >*, cpgf::bind_internal::GGlueDataWrapper*) (in cpgf-build/build/libcpgf.so)
       58 ==27206==    by 0x4F6009C: v8::internal::GlobalHandles::PostGarbageCollectionProcessing(v8::internal::GarbageCollector, v8::internal::GCTracer*) (in lib/node/deps/v8/out/native/lib.target/libv8.so)
    
       94 ==27206== Invalid read of size 8                                                                    
       95 ==27206==    at 0x4B3B2B8: cpgf::variant_internal::CastFromVariant<void*, cpgf::VarantCastKeepConstRef>::cast(cpgf::GVariant const&) (in cpgf-build/build/libcpgf.so)
       96 ==27206==    by 0x4B3D6F2: cpgf::bind_internal::GClassPool::objectDestroyed(cpgf::bind_internal::GObjectInstance const*) (in cpgf-build/build/libcpgf.so)
       97 ==27206==    by 0x4B3D4AD: cpgf::bind_internal::GObjectInstance::~GObjectInstance() (in cpgf-build/build/libcpgf.so)
       98 ==27206==    by 0x4B3DDA8: cpgf::bind_internal::GObjectGlueData::~GObjectGlueData() (in cpgf-build/build/libcpgf.so)
       99 ==27206==    by 0x4B3DD38: cpgf::bind_internal::GObjectGlueData::~GObjectGlueData() (in cpgf-build/build/libcpgf.so)
      100 ==27206==    by 0x4BA3743: cpgf::bind_internal::GGlueDataWrapperImplement<cpgf::GSharedPointer<cpgf::bind_internal::GObjectGlueData> >::~GGlueDataWrapperImplement() (in cpgf-build/build/libcpgf.so)
      101 ==27206==    by 0x4B9B81C: void cpgf::(anonymous namespace)::weakHandleCallback<v8::Object>(v8::Isolate*, v8::Persistent<v8::Object, v8::NonCopyablePersistentTraits<v8::             Object> >*, cpgf::bind_internal::GGlueDataWrapper*) (in cpgf-build/build/libcpgf.so)
      102 ==27206==    by 0x4F6009C: v8::internal::GlobalHandles::PostGarbageCollectionProcessing(v8::internal::GarbageCollector, v8::internal::GCTracer*) (in lib/node/deps/v8/out/native/lib.target/libv8.so)
    

    CPGF should /not/ try to read the address just yet, it should only use it as: a) hash for the cache lookups, (not accessing the mem location itself) b) pass to the object life manager, again, simply as a value (in my case the object life manager will know that C++ has deleted the object)

    Is there a reason why CastFromVariant is trying to read it?

    opened by svalaskevicius 15
  • Question regarding script object destruction

    Question regarding script object destruction

    Hello,

    first of all, thank you for that big library with many nice features.

    Currently I build a program that exposes some C++ classes to scripts. During some tests to check if there are memory leaks while using this classes in scripts, I figured out, that destructors of those exposed classes never get called.

    if I write a script like:

    for x in range(0, 50000):
    	obj = ClassObject()
    	obj.textattribute = "Hello"
    	print("Created object.")
    

    I would expect that python cleans up the objects at some time. If my class has a destructor with some log outputs, I can see, that the destructor never gets called.

    Am I doing something wrong, or is this supposed to be the case, that exposed meta classes destructors aren't registered in script interfaces ?

    Regards

    opened by ErrorFlexXx 14
  • A question regarding script binding performance

    A question regarding script binding performance

    Hi,

    I've used luabind for script binding and then found cpgf and it seems so great, because I always planned to add reflection to my game engine.

    But there is a little question regarding the performance.

    First, I made a benchmark to test the FindMetaMethod+Invoke scenario on i5-3570K for this class:

    class Test
    {
    public:
      int func(int a, int b)
      {
        return a + b;
      }
    };
    
    1. luabind
    luabind::module(state)
    [
      luabind::class_<Test>("Test")
        .def(constructor<>())
        .def("func", &Test::func)
    ];
    
    local obj = Test()
    for i = 1, 10000000 do
        obj:func(1, 2)
    end
    

    This code took 1580ms.

    1. cpgf
    cpgf::GDefineMetaClass<Test>
      ::define("Test")
      ._method("func", &CpgfTest::func);
    
    Test obj;
    cpgf::GMetaClass* t = cpgf::findMetaClass("Test");
    for (int i = 0; i < 10000000; ++i)
    {
        cpgf::GMetaMethod* m = t->getMethod("func");
        cpgf::fromVariant<int>(m->invoke(&obj, 1, 2));
    }
    

    This code took 1135ms, so it's even faster than luabind and I'm happy.

    1. cpgf+lua

    Modified samples/scriptbind/luabind/constructor.cpp sample - added similar TestObject::func method and bencmarked the last line from next code:

    TestLuaContext context;
    GScopedInterface<IMetaClass> metaClass(context.getService()->findClassByName("testscript::TestObject"));
    context.getBinding()->bindClass("TestObject", metaClass.get());
    context.doString("a = TestObject()\nfor i = 1, 1000000 do a.func(1, 2) end\n");
    

    This code took 61332ms, 38 times slower than luabind. I hope I mistaken somewhere. Please help, because I would like very much to use your excellent library

    opened by Neovet 10
  • Call functions with constref params

    Call functions with constref params

    added a failing test for the scenario where the client function has const ref pointers and is not consuming the input immediately but rather storing for later reuse.

    Note: if the function is using the input while its being invoked, its working ok - meaning cpgf is using a temporary variable, that goes out of scope when the pointer is used later.

    Also, if the const ref is removed and only the pointer part is left - its working ok too.

    Ideally, this scenario should work exactly the same as without const refs.

    Real life issue affected by this: svalaskevicius/qtjs-generator#23

    bug 
    opened by svalaskevicius 10
  • For C++ to return (non-const) char* to script, malloc or new?

    For C++ to return (non-const) char* to script, malloc or new?

    A silly question, if I want to expose [char *foo()] to script, how do I allocate the memory? malloc or new char[]?

    Or how to create and return a string native-to-script?

    opened by myocytebd 10
  • compile times very long

    compile times very long

    I have not checked the exact cause, but even in debug mode the compile times for meta classes are very long. I suspect that a good part of this comes from the simulation of variadic templates with the macros in gpp.h.

    define MAX_BASE_COUNT 20

    define GPP_MAX_LIMIT 60

    define G_MAX_ARITY 30

    So the question is: Are there any plans to provide a version that uses variadic templates?

    opened by tnovotny 9
  • why reload methodlist when invoking?

    why reload methodlist when invoking?

    hi @wqking , reading the code, I find it will reload methodlist in doInvokeMethodList of gbindcommon.cpp. Though there is some comments, I cannot understand what is the case the "this" pointer may change.

    opened by ericmayc 8
  • Can metagen support all c++ syntax?

    Can metagen support all c++ syntax?

    Hi @wqking, can metagen support all c++ syntax, such as macro, multiple inheritance etc?

    Can I use it to generate meta data from any C++ library or moudle without any worries?

    Anything I should know about using metagen?

    opened by ericmayc 8
  • Attempting to expose templated global functions fails

    Attempting to expose templated global functions fails

    Hi Again,

    I'm trying to expose glm functions for vectors via cpgf. GLM uses templated inline functions. When I attempt to do this:

    GDefineMetaGlobal()
          ._method("cross", (glm::vec3(glm::vec3 const &, glm::vec3 const &))&glm::cross)
          ._method("someOtherFunc", &someOtherFunc);
    

    It compiles fine with Apple's build chain but cross is not exposed and someOtherFunc is also not exposed. If I remove the "cross" line then "someOtherFunc" is successfully exposed. It seems that anytime I try to expose a templated glm method the rest of my methods are ignored. The only work around I've found so far is to define my own non-templated overloaded methods for glm and expose those instead. I'd like to avoid that workaround if possible since it's a lot of work.

    Please let me know if there is a better forum for this type of question (when I'm not sure if it's a bug or a support request).

    Thanks, Kris

    opened by krisr 8
  • Incorrectly deducing a member function's constness when creating properties

    Incorrectly deducing a member function's constness when creating properties

    I am registering an Eigen::Matrix which has a const and non const member function called "data". When I register data via the two function pointers, I get two properties both called data, but neither of them are flagged as const. I am checking constness with: method->getItemType().isConstFunction()

    I believe this is due to the meta_internal::createPropertyType<Getter, Setter, Policy>() not deducing the constness of the function correctly in the GMetaProperty constructor.

    opened by dtmoodie 4
  • compile cpgf 1.5.6  sampleserialization Failed under visual c++ 2010 sp1!

    compile cpgf 1.5.6 sampleserialization Failed under visual c++ 2010 sp1!

    1>------ 已启动生成: 项目: sampleserialization, 配置: Release Win32 ------ 1>生成启动时间为 2018/6/14 21:41:12。 1>InitializeBuildStatus: 1> 正在对“sampleserialization.dir\Release\sampleserialization.unsuccessfulbuild”执行 Touch 任务。 1>CustomBuild: 1> 所有输出均为最新。 1>ClCompile: 1> object.cpp 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(503): error C2664: “check”: 不能将参数 1 从“MyData”转换为“bool” 1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(617): 参见对正在编译的类 模板 实例化“cpgf::IsConvertible<From,To>”的引用 1> with 1> [ 1> From=MyData, 1> To=int 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/genableif.h(19): 参见对正在编译的类 模板 实例化“cpgf::IsEnum”的引用 1> with 1> [ 1> T=MyData 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gvartypedata_p.h(119): 参见对正在编译的类 模板 实例化“cpgf::GEnableIfResult<C,T>”的引用 1> with 1> [ 1> C=cpgf::IsEnum, 1> T=void 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gvartypedata.h(185): 参见对正在编译的类 模板 实例化“cpgf::variant_internal::DeduceVariantType”的引用 1> with 1> [ 1> T=MyData 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gmetafield_p.h(188): 参见对正在编译的函数 模板 实例化“void cpgf::deduceVariantType(cpgf::GVarTypeData &,bool)”的引用 1> with 1> [ 1> FT=MyData 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gmetafield_p.h(152): 参见对正在编译的函数 模板 实例化“cpgf::GVariant cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::doGet(const void *) const”的引用 1> with 1> [ 1> OT=MyObject, 1> FT=MyData, 1> Policy=cpgf::MakePolicy<> 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gmetafield_p.h(151): 编译类 模板 成员函数“cpgf::GVariant cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::virtualGet(const void *,const void )”时 1> with 1> [ 1> OT=MyObject, 1> FT=MyData, 1> Policy=cpgf::MakePolicy<> 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gmetafield.h(20): 参见对正在编译的类 模板 实例化“cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>”的引用 1> with 1> [ 1> OT=MyObject, 1> FT=MyData, 1> Policy=cpgf::MakePolicy<> 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gmetadefine.h(269): 参见对正在编译的函数 模板 实例化“cpgf::GMetaField::GMetaField<MyObject,MyData,cpgf::MakePolicy<>>(const char ,FT MyObject:: ,const Policy &)”的引用 1> with 1> [ 1> FT=MyData, 1> Policy=cpgf::MakePolicy<> 1> ] 1> ....\samples\serialization\object.cpp(108): 参见对正在编译的函数 模板 实例化“cpgf::GDefineMetaField cpgf::GDefineMetaCommon<ClassT,DerivedType>::_field<MyDataMyObject:: >(const char ,FT)”的引用 1> with 1> [ 1> BaseType=cpgf::GDefineMetaClass, 1> ClassT=MyObject, 1> DerivedType=cpgf::GDefineMetaClass, 1> FT=MyData MyObject:: 1> ] 1> ....\samples\serialization\object.cpp(232): 参见对正在编译的函数 模板 实例化“void register_MyObjectcpgf::GDefineMetaGlobal(D)”的引用 1> with 1> [ 1> D=cpgf::GDefineMetaGlobal 1> ] 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(503): error C2866: “cpgf::IsConvertible<From,To>::Result”: 托管类型的常量静态数据成员必须在声明时初始化 1> with 1> [ 1> From=MyData, 1> To=int 1> ] 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(617): error C2057: 应输入常量表达式 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/genableif.h(19): error C2975: “unnamed-parameter”:“cpgf::GEnableIf”的模板参数无效,应为编译时常量表达式 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/genableif.h(9) : 参见“unnamed-parameter”的声明 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(503): error C2664: “check”: 不能将参数 1 从“const MyData”转换为“bool” 1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/genableif.h(19): 参见对正在编译的类 模板 实例化“cpgf::IsConvertible<From,To,Enabled>”的引用 1> with 1> [ 1> From=const MyData &, 1> To=const cpgf::IObject &, 1> Enabled=void 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gvartypedata.h(185): 参见对正在编译的类 模板 实例化“cpgf::GEnableIfResult<C,T>”的引用 1> with 1> [ 1> C=cpgf::IsConvertible<const MyData &,const cpgf::IObject &,void>, 1> T=void 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gmetafield_p.h(188): 参见对正在编译的函数 模板 实例化“void cpgf::deduceVariantType(cpgf::GVarTypeData &,bool)”的引用 1> with 1> [ 1> FT=MyData * 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gmetafield_p.h(152): 参见对正在编译的函数 模板 实例化“cpgf::GVariant cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::doGet(const void *) const”的引用 1> with 1> [ 1> OT=MyObject, 1> FT=MyData *, 1> Policy=cpgf::MakePolicy<> 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gmetafield_p.h(151): 编译类 模板 成员函数“cpgf::GVariant cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::virtualGet(const void *,const void *)”时 1> with 1> [ 1> OT=MyObject, 1> FT=MyData , 1> Policy=cpgf::MakePolicy<> 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gmetafield.h(20): 参见对正在编译的类 模板 实例化“cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>”的引用 1> with 1> [ 1> OT=MyObject, 1> FT=MyData , 1> Policy=cpgf::MakePolicy<> 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gmetadefine.h(269): 参见对正在编译的函数 模板 实例化“cpgf::GMetaField::GMetaField<MyObject,MyData,cpgf::MakePolicy<>>(const char ,FT MyObject:: ,const Policy &)”的引用 1> with 1> [ 1> FT=MyData , 1> Policy=cpgf::MakePolicy<> 1> ] 1> ....\samples\serialization\object.cpp(109): 参见对正在编译的函数 模板 实例化“cpgf::GDefineMetaField cpgf::GDefineMetaCommon<ClassT,DerivedType>::_field<MyDataMyObject:: >(const char *,FT)”的引用 1> with 1> [ 1> BaseType=cpgf::GDefineMetaClass, 1> ClassT=MyObject, 1> DerivedType=cpgf::GDefineMetaClass, 1> FT=MyData MyObject:: 1> ] 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(503): error C2866: “cpgf::IsConvertible<From,To,Enabled>::Result”: 托管类型的常量静态数据成员必须在声明时初始化 1> with 1> [ 1> From=const MyData &, 1> To=const cpgf::IObject &, 1> Enabled=void 1> ] 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/genableif.h(19): error C2975: “unnamed-parameter”:“cpgf::GEnableIf”的模板参数无效,应为编译时常量表达式 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/genableif.h(9) : 参见“unnamed-parameter”的声明 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(503): error C2070: “void”: 非法的 sizeof 操作数 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gtypetraits.h(617): 参见对正在编译的类 模板 实例化“cpgf::IsConvertible<From,To>”的引用 1> with 1> [ 1> From=MyData *, 1> To=int 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/genableif.h(19): 参见对正在编译的类 模板 实例化“cpgf::IsEnum”的引用 1> with 1> [ 1> T=MyData * 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gvartypedata_p.h(119): 参见对正在编译的类 模板 实例化“cpgf::GEnableIfResult<C,T>”的引用 1> with 1> [ 1> C=cpgf::IsEnum<MyData *>, 1> T=void 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gvartypedata.h(185): 参见对正在编译的类 模板 实例化“cpgf::variant_internal::DeduceVariantType”的引用 1> with 1> [ 1> T=MyData * 1> ] 1> 1>生成失败。

    opened by cxq2003 2
  • compile cpgf 1.5.6 samplereflection  Failed under visual c++ 2010 sp1!

    compile cpgf 1.5.6 samplereflection Failed under visual c++ 2010 sp1!

    1>------ 已启动生成: 项目: samplereflection, 配置: Release Win32 ------ 1>生成启动时间为 2018/6/14 21:37:02。 1>InitializeBuildStatus: 1> 正在对“samplereflection.dir\Release\samplereflection.unsuccessfulbuild”执行 Touch 任务。 1>CustomBuild: 1> 所有输出均为最新。 1>ClCompile: 1> property.cpp 1>D:\reflection\cpgf-1.5.6\build..\include\cpgf/accessor/ggetter.h(157): error C2248: “TestNoncopyable::TestNoncopyable”: 无法访问 private 成员(在“TestNoncopyable”类中声明) 1> d:\reflection\cpgf-1.5.6\samples\reflection\reflect_common.h(85) : 参见“TestNoncopyable::TestNoncopyable”的声明 1> d:\reflection\cpgf-1.5.6\samples\reflection\reflect_common.h(65) : 参见“TestNoncopyable”的声明 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/accessor/ggetter.h(156): 编译类 模板 成员函数“TestNoncopyable cpgf::GInstanceGetter<RawGetter,Policy>::get(const void ) const”时 1> with 1> [ 1> RawGetter=TestNoncopyable anonymous-namespace'::TestObject::* , 1> Policy=cpgf::MakePolicy<cpgf::GMetaRuleForbidRead,cpgf::GMetaRuleForbidWrite> 1> ] 1> D:\reflection\cpgf-1.5.6\build\..\include\cpgf/private/gmetaproperty_p.h(30): 参见对正在编译的类 模板 实例化“cpgf::GInstanceGetter<RawGetter,Policy>”的引用 1> with 1> [ 1> RawGetter=TestNoncopyableanonymous-namespace'::TestObject:: , 1> Policy=cpgf::MakePolicycpgf::GMetaRuleForbidRead,cpgf::GMetaRuleForbidWrite 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/private/gmetaproperty_p.h(177): 参见对正在编译的类 模板 实例化“cpgf::meta_internal::GMetaGetter<Getter,Policy>”的引用 1> with 1> [ 1> Getter=TestNoncopyable anonymous-namespace'::TestObject::* , 1> Policy=cpgf::MakePolicy<cpgf::GMetaRuleForbidRead,cpgf::GMetaRuleForbidWrite> 1> ] 1> D:\reflection\cpgf-1.5.6\build\..\include\cpgf/gmetaproperty.h(20): 参见对正在编译的类 模板 实例化“cpgf::meta_internal::GMetaPropertyData<Getter,Setter,Policy>”的引用 1> with 1> [ 1> Getter=TestNoncopyableanonymous-namespace'::TestObject::* , 1> Setter=int, 1> Policy=cpgf::MakePolicycpgf::GMetaRuleForbidRead,cpgf::GMetaRuleForbidWrite 1> ] 1> D:\reflection\cpgf-1.5.6\build..\include\cpgf/gmetadefine.h(293): 参见对正在编译的函数 模板 实例化“cpgf::GMetaProperty::GMetaProperty<Getter,Setter,Policy>(const char ,const Getter &,const Setter &,const Policy &)”的引用 1> with 1> [ 1> Getter=TestNoncopyable anonymous-namespace'::TestObject::* , 1> Setter=int, 1> Policy=cpgf::MakePolicy<cpgf::GMetaRuleForbidRead,cpgf::GMetaRuleForbidWrite> 1> ] 1> ..\..\samples\reflection\property.cpp(67): 参见对正在编译的函数 模板 实例化“cpgf::GDefineMetaProperty<BaseType> cpgf::GDefineMetaCommon<ClassT,DerivedType>::_property<TestNoncopyableanonymous-namespace'::TestObject:: ,int,cpgf::MakePolicy<T0,T1>>(const char ,const Getter &,const Setter &,const Policy &)”的引用 1> with 1> [ 1> BaseType=cpgf::GDefineMetaClass<anonymous-namespace'::TestObject>, 1> ClassT=anonymous-namespace'::TestObject, 1> DerivedType=cpgf::GDefineMetaClass<anonymous-namespace'::TestObject>, 1> T0=cpgf::GMetaRuleForbidRead, 1> T1=cpgf::GMetaRuleForbidWrite, 1> Getter=TestNoncopyableanonymous-namespace'::TestObject:: , 1> Setter=int, 1> Policy=cpgf::MakePolicycpgf::GMetaRuleForbidRead,cpgf::GMetaRuleForbidWrite 1> ] 1> 1>生成失败。

    opened by cxq2003 1
  • Can't register boost::function as field or function argument

    Can't register boost::function as field or function argument

    Trying to register boost::function < void() > class field using ._field(name, field) and getting compilation error inside G_STATIC_CONSTANT(bool, Result = (IsSameType<From, To>::Result || (sizeof(check(from)) == sizeof(typetraits_internal::YesType)))) from CastVariantSelector:

    Libs\boost\boost/function/function_template.hpp(153): error C2064: term does not evaluate to a function taking 0 arguments
              Libs\boost\boost/function/function_template.hpp(147) : while compiling class template member function 'void boost::detail::function::void_function_obj_invoker0<FunctionObj,R>::invoke(boost::detail::function::function_buffer &)'
              with
              [
                  FunctionObj=float
      ,            R=void
              ]
              Libs\boost\boost/function/function_template.hpp(934) : see reference to function template instantiation 'void boost::detail::function::void_function_obj_invoker0<FunctionObj,R>::invoke(boost::detail::function::function_buffer &)' being compiled
              with
              [
                  FunctionObj=float
      ,            R=void
              ]
              Libs\boost\boost/function/function_template.hpp(934) : see reference to class template instantiation 'boost::detail::function::void_function_obj_invoker0<FunctionObj,R>' being compiled
              with
              [
                  FunctionObj=float
      ,            R=void
              ]
              Libs\boost\boost/function/function_template.hpp(722) : see reference to function template instantiation 'void boost::function0<R>::assign_to<Functor>(Functor)' being compiled
              with
              [
                  R=void
      ,            Functor=float
              ]
              Libs\boost\boost/function/function_template.hpp(722) : see reference to function template instantiation 'void boost::function0<R>::assign_to<Functor>(Functor)' being compiled
              with
              [
                  R=void
      ,            Functor=float
              ]
              Libs\boost\boost/function/function_template.hpp(1072) : see reference to function template instantiation 'boost::function0<R>::function0<From>(Functor,int)' being compiled
              with
              [
                  R=void
      ,            From=float
      ,            Functor=float
              ]
              Libs\boost\boost/function/function_template.hpp(1072) : see reference to function template instantiation 'boost::function0<R>::function0<From>(Functor,int)' being compiled
              with
              [
                  R=void
      ,            From=float
      ,            Functor=float
              ]
              Libs\cpgf\include\cpgf/gtypetraits.h(503) : see reference to function template instantiation 'boost::function<void (void)>::function<From>(Functor,int)' being compiled
              with
              [
                  From=float
      ,            Functor=float
              ]
              Libs\cpgf\include\cpgf/private/gvariant_p.h(69) : see reference to function template instantiation 'boost::function<void (void)>::function<From>(Functor,int)' being compiled
              with
              [
                  From=float
      ,            Functor=float
              ]
              Libs\cpgf\include\cpgf/genableif.h(57) : see reference to class template instantiation 'cpgf::IsConvertible<From,To,void>' being compiled
              with
              [
                  From=float
      ,            To=boost::function<void (void)>
              ]
              Libs\cpgf\include\cpgf/genableif.h(19) : see reference to class template instantiation 'cpgf::GOrResult<cpgf::IsConvertible<From,To,void>,cpgf::GAndResult<cpgf::IsEnum<From>,cpgf::IsConvertible<int,To,void>,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult>,cpgf::GAndResult<cpgf::IsEnum<boost::function<void (void)>>,cpgf::IsConvertible<From,int,void>,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult>,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult>' being compiled
              with
              [
                  From=float
      ,            To=boost::function<void (void)>
              ]
              Libs\cpgf\include\cpgf/private/gvariant_p.h(133) : see reference to class template instantiation 'cpgf::GEnableIfResult<cpgf::GOrResult<cpgf::IsConvertible<From,To,void>,cpgf::GAndResult<cpgf::IsEnum<From>,cpgf::IsConvertible<int,To,void>,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult>,cpgf::GAndResult<cpgf::IsEnum<boost::function<void (void)>>,cpgf::IsConvertible<From,int,void>,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult,cpgf::GTrueResult>,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult,cpgf::GFalseResult>,void>' being compiled
              with
              [
                  From=float
      ,            To=boost::function<void (void)>
              ]
              Libs\cpgf\include\cpgf/private/gvariant_p.h(826) : see reference to class template instantiation 'cpgf::variant_internal::CastVariantHelper<float,boost::function<void (void)>,void>' being compiled
              Libs\cpgf\include\cpgf/private/gvariant_p.h(781) : while compiling class template member function 'boost::function<void (void)> cpgf::variant_internal::CastFromVariant<FT,cpgf::VarantCastKeepConstRef>::cast(const cpgf::GVariant &)'
              with
              [
                  FT=F_Void
              ]
              Libs\cpgf\include\cpgf/gvariant.h(212) : see reference to function template instantiation 'boost::function<void (void)> cpgf::variant_internal::CastFromVariant<FT,cpgf::VarantCastKeepConstRef>::cast(const cpgf::GVariant &)' being compiled
              with
              [
                  FT=F_Void
              ]
              Libs\cpgf\include\cpgf/private/gmetafield_p.h(201) : see reference to class template instantiation 'cpgf::variant_internal::CastFromVariant<FT,cpgf::VarantCastKeepConstRef>' being compiled
              with
              [
                  FT=F_Void
              ]
              Libs\cpgf\include\cpgf/private/gmetafield_p.h(156) : see reference to function template instantiation 'void cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::doSet<void>(void *,const cpgf::GVariant &) const' being compiled
              with
              [
                  OT=Dao::Application
      ,            FT=F_Void
      ,            Policy=cpgf::MakePolicy<cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType>
              ]
              Libs\cpgf\include\cpgf/private/gmetafield_p.h(156) : see reference to function template instantiation 'void cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::doSet<void>(void *,const cpgf::GVariant &) const' being compiled
              with
              [
                  OT=Dao::Application
      ,            FT=F_Void
      ,            Policy=cpgf::MakePolicy<cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType>
              ]
              Libs\cpgf\include\cpgf/private/gmetafield_p.h(155) : while compiling class template member function 'void cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::virtualSet(const void *,void *,const cpgf::GVariant &)'
              with
              [
                  OT=Dao::Application
      ,            FT=F_Void
      ,            Policy=cpgf::MakePolicy<cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType>
              ]
              Libs\cpgf\include\cpgf/private/gmetafield_p.h(180) : see reference to function template instantiation 'void cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>::virtualSet(const void *,void *,const cpgf::GVariant &)' being compiled
              with
              [
                  OT=Dao::Application
      ,            FT=F_Void
      ,            Policy=cpgf::MakePolicy<cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType>
              ]
              Libs\cpgf\include\cpgf/gmetafield.h(20) : see reference to class template instantiation 'cpgf::meta_internal::GMetaFieldDataMember<OT,FT,Policy>' being compiled
              with
              [
                  OT=Dao::Application
      ,            FT=F_Void
      ,            Policy=cpgf::MakePolicy<cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType>
              ]
              Libs\cpgf\include\cpgf/gmetadefine.h(270) : see reference to function template instantiation 'cpgf::GMetaField::GMetaField<Dao::Application,F,cpgf::MakePolicy<cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType>>(const char *,FT Dao::Application::* ,const Policy &)' being compiled
              with
              [
                  F=F_Void
      ,            FT=F_Void
      ,            Policy=cpgf::MakePolicy<cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType,cpgf::GNullType>
              ]
              Reflection/Reflection.h(457) : see reference to function template instantiation 'cpgf::GDefineMetaField<DerivedType> cpgf::GDefineMetaCommon<ClassType,DerivedType>::_field<FDao::Application::* >(const char *,FT)' being compiled
              with
              [
                  DerivedType=cpgf::GDefineMetaClass<Dao::Application,void,void>
      ,            ClassType=Dao::Application
      ,            F=F_Void
      ,            FT=F_Void Dao::Application::* 
              ]
              Reflection/Reflection.h(457) : see reference to function template instantiation 'cpgf::GDefineMetaField<DerivedType> cpgf::GDefineMetaCommon<ClassType,DerivedType>::_field<FDao::Application::* >(const char *,FT)' being compiled
              with
              [
                  DerivedType=cpgf::GDefineMetaClass<Dao::Application,void,void>
      ,            ClassType=Dao::Application
      ,            F=F_Void
      ,            FT=F_Void Dao::Application::* 
              ]
              Application.cpp(858) : see reference to function template instantiation 'Dao::Reflection::Class<Dao::Application,luabind::detail::unspecified> &Dao::Reflection::Class<Dao::Application,luabind::detail::unspecified>::Property<F_Void>(const char *,F Dao::Application::* )' being compiled
              with
              [
                  F=F_Void
              ]
              Application.cpp(893) : see reference to function template instantiation 'Dao::Reflection::Class<Dao::Application,luabind::detail::unspecified> &Dao::Reflection::Class<Dao::Application,luabind::detail::unspecified>::Property<F_Void>(const char *,F Dao::Application::* )' being compiled
              with
              [
                  F=F_Void
              ]
    
    opened by Neovet 4
Releases(v1.6.1)
Owner
cpgf library
C++ library for reflection, serialization, script binding, and more
cpgf library
C++ Reflection Library

!New Release - 0.9.6! RTTR C++ Reflection Library RTTR stands for Run Time Type Reflection. It describes the ability of a computer program to introspe

rttr.org 2.5k Jan 3, 2023
A miniature library for struct-field reflection in C++

visit_struct A header-only library providing structure visitors for C++11 and C++14. Motivation In C++ there is no built-in way to iterate over the me

null 393 Dec 12, 2022
Customizable C++17 Runtime Reflection Library

Refureku Check the Wiki for more documentation and use examples! Refureku is a powerful C++17 RTTI free runtime reflection library based on Kodgen. It

Julien SOYSOUVANH 177 Dec 28, 2022
A modern compile-time reflection library for C++ with support for overloads, templates, attributes and proxies

refl-cpp v0.12.1 Documentation refl-cpp encodes type metadata in the type system to allow compile-time reflection via constexpr and template metaprogr

Veselin Karaganev 783 Dec 31, 2022
A miniature library for struct-field reflection in C++

visit_struct A header-only library providing structure visitors for C++11 and C++14. Motivation In C++ there is no built-in way to iterate over the me

null 397 Jan 7, 2023
SSD1306 library and simple graphics core library based on Adafruit GFX Library.

Raspberry Pico SSD1306 + GFX Library Based on Adafruit GFX Library https://github.com/adafruit/Adafruit-GFX-Library Usage Hardware Connect your SSD130

Marcin Bober 31 Sep 1, 2022
This library provides a cross-platform image loading library in C11 for projects based on our foundation library

Image Library - Public Domain This library provides a cross-platform image loading library in C11 for projects based on our foundation library.

Mattias Jansson 1 Jan 29, 2022
The dgSPARSE Library (Deep Graph Sparse Library) is a high performance library for sparse kernel acceleration on GPUs based on CUDA.

dgSPARSE Library Introdution The dgSPARSE Library (Deep Graph Sparse Library) is a high performance library for sparse kernel acceleration on GPUs bas

dgSPARSE 59 Dec 5, 2022
C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library

Build Status Travis CI VM: Linux x64: Raspberry Pi 3: Jetson TX2: Backstory I set to build ccv with a minimalism inspiration. That was back in 2010, o

Liu Liu 6.9k Jan 6, 2023
A simple header-only C++ argument parser library. Supposed to be flexible and powerful, and attempts to be compatible with the functionality of the Python standard argparse library (though not necessarily the API).

args Note that this library is essentially in maintenance mode. I haven't had the time to work on it or give it the love that it deserves. I'm not add

Taylor C. Richberger 1.1k Jan 4, 2023
Bolt is a C++ template library optimized for GPUs. Bolt provides high-performance library implementations for common algorithms such as scan, reduce, transform, and sort.

Bolt is a C++ template library optimized for heterogeneous computing. Bolt is designed to provide high-performance library implementations for common

null 360 Dec 27, 2022
oneAPI DPC++ Library (oneDPL) https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/dpc-library.html

oneAPI DPC++ Library (oneDPL) The oneAPI DPC++ Library (oneDPL) aims to work with the oneAPI DPC++ Compiler to provide high-productivity APIs to devel

oneAPI-SRC 646 Dec 29, 2022
C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library

Build Status Travis CI VM: Linux x64: Raspberry Pi 3: Jetson TX2: Backstory I set to build ccv with a minimalism inspiration. That was back in 2010, o

Liu Liu 6.9k Jan 6, 2023
MIRACL Cryptographic SDK: Multiprecision Integer and Rational Arithmetic Cryptographic Library is a C software library that is widely regarded by developers as the gold standard open source SDK for elliptic curve cryptography (ECC).

MIRACL What is MIRACL? Multiprecision Integer and Rational Arithmetic Cryptographic Library – the MIRACL Crypto SDK – is a C software library that is

MIRACL 527 Jan 7, 2023
Mongoose Embedded Web Server Library - a multi-protocol embedded networking library with TCP/UDP, HTTP, WebSocket, MQTT built-in protocols, async DNS resolver, and non-blocking API.

Mongoose - Embedded Web Server / Embedded Networking Library Mongoose is a networking library for C/C++. It implements event-driven non-blocking APIs

Cesanta Software 9k Jan 1, 2023
MIRACL Cryptographic SDK: Multiprecision Integer and Rational Arithmetic Cryptographic Library is a C software library that is widely regarded by developers as the gold standard open source SDK for elliptic curve cryptography (ECC).

MIRACL What is MIRACL? Multiprecision Integer and Rational Arithmetic Cryptographic Library – the MIRACL Crypto SDK – is a C software library that is

MIRACL 524 Jan 2, 2023
C Hypertext Library - A library for writing web applications in C

CHL C Hypertext Library - A library for writing web applications in C #include <chl/chl.h> int main() { chl_set_default_headers(); chl_print_header

null 271 Nov 14, 2022
This repository is a summary of the basic knowledge of recruiting job seekers and beginners in the direction of C/C++ technology, including language, program library, data structure, algorithm, system, network, link loading library, interview experience, recruitment, recommendation, etc.

?? C/C++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary of the basic knowledge of recruiting job seekers and beginners in the direction of C/C++ technology, including language, program library, data structure, algorithm, system, network, link loading library, interview experience, recruitment, recommendation, etc.

huihut 27k Dec 31, 2022
C XML Minimalistic Library (CXML) - An XML library for C with a focus on simplicity and ease of use.

cxml (C XML Minimalistic Library) is a powerful and flexible XML library for C with a focus on simplicity and ease of use, coupled with features that enables quick processing of XML documents.

null 29 Dec 26, 2022
Edge ML Library - High-performance Compute Library for On-device Machine Learning Inference

Edge ML Library (EMLL) offers optimized basic routines like general matrix multiplications (GEMM) and quantizations, to speed up machine learning (ML) inference on ARM-based devices. EMLL supports fp32, fp16 and int8 data types. EMLL accelerates on-device NMT, ASR and OCR engines of Youdao, Inc.

NetEase Youdao 180 Jan 7, 2023