22 struct CallableContainer;
30 class POTHOS_API Callable :
public CallInterface
55 Object opaqueCall(
const Object *inputArgs,
const size_t numArgs)
const;
62 size_t getNumArgs(
void)
const;
72 const std::type_info &type(
const int argNo)
const;
83 template <
typename ValueType>
84 Callable &bind(ValueType &&val,
const size_t argNo);
95 Callable &bind(Object &&val,
const size_t argNo);
103 Callable &unbind(
const size_t argNo);
110 std::string toString(
void)
const;
113 template <
typename ReturnType,
typename ClassType>
114 Callable(ReturnType(ClassType::*fcn)());
117 template <
typename ReturnType,
typename ClassType>
118 Callable(ReturnType(ClassType::*fcn)()
const);
121 template <
typename ReturnType>
122 Callable(ReturnType(*fcn)());
129 template <
typename ReturnType,
typename ClassType>
130 static Callable make(ReturnType(ClassType::*fcn)());
137 template <
typename ReturnType,
typename ClassType>
138 static Callable make(ReturnType(ClassType::*fcn)()
const);
145 template <
typename ReturnType>
146 static Callable make(ReturnType(*fcn)());
152 template <
typename ClassType>
153 static Callable factory(
void);
161 template <
typename ClassType>
162 static Callable factoryNew(
void);
169 template <
typename ClassType>
170 static Callable factoryShared(
void);
173 template <
typename ReturnType,
typename ClassType,
typename A0>
174 Callable(ReturnType(ClassType::*fcn)(A0));
177 template <
typename ReturnType,
typename ClassType,
typename A0>
178 Callable(ReturnType(ClassType::*fcn)(A0)
const);
181 template <
typename ReturnType,
typename A0>
182 Callable(ReturnType(*fcn)(A0));
189 template <
typename A0,
typename ReturnType,
typename ClassType>
190 static Callable make(ReturnType(ClassType::*fcn)(A0));
197 template <
typename A0,
typename ReturnType,
typename ClassType>
198 static Callable make(ReturnType(ClassType::*fcn)(A0)
const);
205 template <
typename A0,
typename ReturnType>
206 static Callable make(ReturnType(*fcn)(A0));
212 template <
typename ClassType,
typename A0>
213 static Callable factory(
void);
221 template <
typename ClassType,
typename A0>
222 static Callable factoryNew(
void);
229 template <
typename ClassType,
typename A0>
230 static Callable factoryShared(
void);
233 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1>
234 Callable(ReturnType(ClassType::*fcn)(A0, A1));
237 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1>
238 Callable(ReturnType(ClassType::*fcn)(A0, A1)
const);
241 template <
typename ReturnType,
typename A0,
typename A1>
242 Callable(ReturnType(*fcn)(A0, A1));
249 template <
typename A0,
typename A1,
typename ReturnType,
typename ClassType>
250 static Callable make(ReturnType(ClassType::*fcn)(A0, A1));
257 template <
typename A0,
typename A1,
typename ReturnType,
typename ClassType>
258 static Callable make(ReturnType(ClassType::*fcn)(A0, A1)
const);
265 template <
typename A0,
typename A1,
typename ReturnType>
266 static Callable make(ReturnType(*fcn)(A0, A1));
272 template <
typename ClassType,
typename A0,
typename A1>
273 static Callable factory(
void);
281 template <
typename ClassType,
typename A0,
typename A1>
282 static Callable factoryNew(
void);
289 template <
typename ClassType,
typename A0,
typename A1>
290 static Callable factoryShared(
void);
293 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2>
294 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2));
297 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2>
298 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2)
const);
301 template <
typename ReturnType,
typename A0,
typename A1,
typename A2>
302 Callable(ReturnType(*fcn)(A0, A1, A2));
309 template <
typename A0,
typename A1,
typename A2,
typename ReturnType,
typename ClassType>
310 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2));
317 template <
typename A0,
typename A1,
typename A2,
typename ReturnType,
typename ClassType>
318 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2)
const);
325 template <
typename A0,
typename A1,
typename A2,
typename ReturnType>
326 static Callable make(ReturnType(*fcn)(A0, A1, A2));
332 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
333 static Callable factory(
void);
341 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
342 static Callable factoryNew(
void);
349 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
350 static Callable factoryShared(
void);
353 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
354 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3));
357 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
358 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3)
const);
361 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3>
362 Callable(ReturnType(*fcn)(A0, A1, A2, A3));
369 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename ReturnType,
typename ClassType>
370 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3));
377 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename ReturnType,
typename ClassType>
378 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3)
const);
385 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename ReturnType>
386 static Callable make(ReturnType(*fcn)(A0, A1, A2, A3));
392 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
393 static Callable factory(
void);
401 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
402 static Callable factoryNew(
void);
409 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
410 static Callable factoryShared(
void);
413 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
414 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4));
417 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
418 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4)
const);
421 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
422 Callable(ReturnType(*fcn)(A0, A1, A2, A3, A4));
429 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename ReturnType,
typename ClassType>
430 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4));
437 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename ReturnType,
typename ClassType>
438 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4)
const);
445 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename ReturnType>
446 static Callable make(ReturnType(*fcn)(A0, A1, A2, A3, A4));
452 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
453 static Callable factory(
void);
461 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
462 static Callable factoryNew(
void);
469 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
470 static Callable factoryShared(
void);
473 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
474 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5));
477 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
478 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5)
const);
481 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
482 Callable(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5));
489 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename ReturnType,
typename ClassType>
490 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5));
497 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename ReturnType,
typename ClassType>
498 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5)
const);
505 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename ReturnType>
506 static Callable make(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5));
512 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
513 static Callable factory(
void);
521 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
522 static Callable factoryNew(
void);
529 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
530 static Callable factoryShared(
void);
533 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
534 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6));
537 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
538 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6)
const);
541 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
542 Callable(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5, A6));
549 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename ReturnType,
typename ClassType>
550 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6));
557 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename ReturnType,
typename ClassType>
558 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6)
const);
565 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename ReturnType>
566 static Callable make(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5, A6));
572 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
573 static Callable factory(
void);
581 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
582 static Callable factoryNew(
void);
589 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
590 static Callable factoryShared(
void);
593 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
594 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7));
597 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
598 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7)
const);
601 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
602 Callable(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5, A6, A7));
609 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename ReturnType,
typename ClassType>
610 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7));
617 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename ReturnType,
typename ClassType>
618 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7)
const);
625 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename ReturnType>
626 static Callable make(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5, A6, A7));
632 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
633 static Callable factory(
void);
641 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
642 static Callable factoryNew(
void);
649 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
650 static Callable factoryShared(
void);
653 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
654 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7, A8));
657 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
658 Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7, A8)
const);
661 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
662 Callable(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5, A6, A7, A8));
669 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename ReturnType,
typename ClassType>
670 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7, A8));
677 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename ReturnType,
typename ClassType>
678 static Callable make(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7, A8)
const);
685 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename ReturnType>
686 static Callable make(ReturnType(*fcn)(A0, A1, A2, A3, A4, A5, A6, A7, A8));
692 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
693 static Callable factory(
void);
701 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
702 static Callable factoryNew(
void);
709 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
710 static Callable factoryShared(
void);
713 std::vector<Object> _boundArgs;
714 std::shared_ptr<Detail::CallableContainer> _impl;
#define pothos_explicit
Definition: Config.hpp:85
#define POTHOS_API
Definition: Config.hpp:41
POTHOS_API bool operator==(const Callable &lhs, const Callable &rhs)