Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
521 views
in Technique[技术] by (71.8m points)

c++ - Get argument type of template callable object

Consider the following function:

template<class F>
void register_handler( F& f ) // any callable object
{
   // find out T - the argument type of f
}

Here f is some callable object, accepting one argument. It may be a function pointer, an std::function or a result of std::bind.

The problem is, how to determine the argument type of f and do some actions based on that type?


An easy workaround would be to add the type to template explicitly, like

template<class T, class F> // T is the argument type of F
void register_handler( F& f )

but this seems an overkill because type F should already contain the necessary information about type T.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Assuming F is any callable type, you cannot get its argument type. Consider this:

struct callable
{
    void operator() (int);
    void operator() (float *);
    void operator() (std::string const &);
    void operator() (std::list<int> &);
};

the type of argument is an ambiguity here.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...