#define cpLog(priority__, fmt__, args__...) 
extern void cpLog ( priority__, fmt__, ##args__);
这样的定义在windows下编译不过。不知道怎样才可以用#define替换任意参数的函数。那位高手可以回答?

解决方案 »

  1.   

    #include <iostream.h> 
    template <class T> 
    class myclass{ 
    T temp; 
    public: 
    myclass(T name){ 
    temp=name; 
    } T vomit(){ 
    return temp; 

    }; void main() 

    myclass<int> t1(2); 
    cout<<t1.vomit()<<endl; 
    myclass<char*> t2("醉拳"); 
    cout<<t2.vomit()<<endl; 
    myclass<float> t3(3.14159); 
    cout<<t3.vomit()<<endl; 
      

  2.   

    #include <iostream.h> 
    template <class T> 
    void f(T qie) 

    cout<<qie<<endl; 
    } #define X f<char*> void main() 

    f<int>(3); 
    f<char>('r'); 
    X("aadf"); 
      

  3.   

    楼主说的是不是可变参数(参数个数不固定)?
    使用宏一般不行,可以使用函数来实现。
    如:
    #include <stdio.h>void Func(LPTSTR fmt,...)
    {
      va_list er;
      va_start(er, fmt);
      printf(fmt, er);
      va_end(er);
    }
      

  4.   

    同意awnucel(西大耻犹未雪,南京恨何时灭&抵制日货) 用模板实现还有用宏容易产生错误,尽量避免使用。
      

  5.   

    嘿嘿,我的意思chehw(chehw)说对了。我就是需要替换可变参数。宏在某些时候有不可替代的作用。空的宏可以做到完全屏蔽函数及其参数带来的函数调用,用。不知道在那个操作系统上(忘记了)可以编译过我写的那段代码。但是在windows上不行,所以有此一问。模版stl代码等我都用烂了,主要是有些问题一定要define解决,void Func(LPTSTR fmt,...)还是会带来函数调用以及参数函数调用,希望各位高手能够从实际出发帮帮我的忙:)