代码中有一段宏定义如下:#define CLASS_THREAD(c , x ) \
rp::hal::Thread::create_member<c, &c::x>(this )
小弟看了半天一直没看懂是什么意思,这个替换语法还是第一次见,还请路过的高人给指点指点。

解决方案 »

  1.   

    [color=#FF0000]详细代码是这样的[/color]#pragma once#include "rptypes.h"
    #define CLASS_THREAD(c , x ) \
    rp::hal::Thread::create_member<c, &c::x>(this )namespace rp{ namespace hal{class Thread
    {
    public:
        enum priority_val_t
    {
    PRIORITY_REALTIME = 0,
    PRIORITY_HIGH     = 1,
    PRIORITY_NORMAL   = 2,
    PRIORITY_LOW      = 3,
    PRIORITY_IDLE     = 4,
    };    template <class T, u_result (T::*PROC)(void)>
        static Thread create_member(T * pthis)
        {
    return create(_thread_thunk<T,PROC>, pthis);
    } template <class T, u_result (T::*PROC)(void) >
    static _word_size_t THREAD_PROC _thread_thunk(void * data)
    {
    return (static_cast<T *>(data)->*PROC)();
    }
    static Thread create(thread_proc_t proc, void * data = NULL );public:
        ~Thread() { }
        Thread():  _data(NULL),_func(NULL),_handle(0)  {}
        _word_size_t getHandle(){ return _handle;}
        u_result terminate();
        void *getData() { return _data;}
        u_result join(unsigned long timeout = -1);
    u_result setPriority( priority_val_t p);
    priority_val_t getPriority();    bool operator== ( const Thread & right) { return this->_handle == right._handle; }
    protected:
        Thread( thread_proc_t proc, void * data ): _data(data),_func(proc), _handle(0)  {}
        void * _data;
        thread_proc_t _func;
        _word_size_t _handle;
    };}}
      

  2.   

    VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
      

  3.   

    【追问】“_cachethread = CLASS_THREAD(RPlidarDriverSerialImpl, _cacheCapsuledScanData);”,追溯到在thread.h头文件中,关于CLASS_THREAD的宏定义:“#define CLASS_THREAD(c , x ) \
    rp::hal::Thread::create_member<c, &c::x>(this )”,将之替换,发现_cachethread等号右边语句似乎不符合语法规范,不知是否我方的替换过程有错。请问此替换过程是否有误?
    _cachethread = rp::hal::Thread::create_member<RPlidarDriverSerialImpl,&RPlidarDriverSerialImpl::_cacheCapsuledScanData>(this);编译后报错结果是INTERNAL COMPILER ERROR,编译内部错误。请问赋值语句等号右侧出现逗号断句,结尾分号,这种结构可以通过编译吗?A=B<b,C>c;实在不理解啊!
      

  4.   

    VC编译选项加/EP /P(项目、属性、配置属性、C/C++、预处理器、预处理到文件:是,预处理取消显示行号:是),重新编译,查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898