@@ -203,12 +203,13 @@ namespace mimicpp
203203 * \param traits The interface traits.
204204 * \param mock_name The mock name.
205205 * \param fn_name The function name.
206+ * \param linkage The linkage specifier(s).
206207 * \param signatures The given signatures. Enclosing parentheses will be stripped.
207208 */
208- #define MIMICPP_DETAIL_MAKE_OVERLOADED_MOCK (traits, mock_name, fn_name, signatures ) \
209- typename traits::mock_type<MIMICPP_DETAIL_STRIP_PARENS(signatures)> mock_name \
210- { \
211- traits::make_settings (*this , #fn_name) \
209+ #define MIMICPP_DETAIL_MAKE_OVERLOADED_MOCK (traits, mock_name, fn_name, linkage, signatures ) \
210+ linkage typename traits::mock_type<MIMICPP_DETAIL_STRIP_PARENS(signatures)> mock_name \
211+ { \
212+ traits::make_settings (*this , #fn_name) \
212213 }
213214
214215namespace mimicpp
@@ -393,36 +394,38 @@ namespace mimicpp
393394 * \param traits The interface traits.
394395 * \param mock_name The mock name.
395396 * \param fn_name The function name.
397+ * \param linkage The linkage for both, the facade functions and the target.
396398 * \param ret The return type.
397399 * \param call_convention The call-convention.
398400 * \param param_type_list The parameter types.
399401 * \param specs Additional specifiers (e.g. ``const``, ``noexcept``, etc.).
400402 * \param param_list Enclosed parameter list.
401403 * \param forward_list Enclosed forward statements.
402404 */
403- #define MIMICPP_DETAIL_MAKE_METHOD_OVERRIDE (ignore, traits, mock_name, fn_name, ret, call_convention, param_type_list, specs, param_list, forward_list, ...) \
404- MIMICPP_DETAIL_MAKE_FACADE_FUNCTION ( \
405- traits, \
406- (MIMICPP_DETAIL_STRIP_PARENS(ret) call_convention fn_name param_list specs override ), \
407- (MIMICPP_DETAIL_STRIP_PARENS(ret) param_type_list specs), \
408- mock_name, \
405+ #define MIMICPP_DETAIL_MAKE_METHOD_OVERRIDE (ignore, traits, mock_name, fn_name, linkage, ret, call_convention, param_type_list, specs, param_list, forward_list, ...) \
406+ MIMICPP_DETAIL_MAKE_FACADE_FUNCTION ( \
407+ traits, \
408+ (linkage MIMICPP_DETAIL_STRIP_PARENS (ret) call_convention fn_name param_list specs override ), \
409+ (MIMICPP_DETAIL_STRIP_PARENS(ret) param_type_list specs), \
410+ mock_name, \
409411 (this , ::std::tuple_cat(MIMICPP_DETAIL_STRIP_PARENS(forward_list))))
410412
411413/* *
412414 * \brief Creates all overloads for a specific function facade.
413415 * \ingroup MOCK_INTERFACES_DETAIL_MAKE_FACADES
414- * \param traits The interface traits.
415416 * \param op The operation for each element (see `MIMICPP_DETAIL_MAKE_METHOD_OVERRIDE` as an example for the list of required arguments).
417+ * \param traits The interface traits.
416418 * \param mock_name The mock name.
417419 * \param fn_name The function name to be overloaded.
418- */
419- #define MIMICPP_DETAIL_MAKE_INTERFACE_FACADE_OVERLOADS (traits, op, mock_name, fn_name, ...) \
420- MIMICPP_DETAIL_FOR_EACH_EXT ( \
421- op, \
422- , \
423- MIMICPP_DETAIL_NO_DELIMITER, \
424- MIMICPP_DETAIL_STRIP_PARENS, \
425- (traits, mock_name, fn_name), \
420+ * \param linkage The linkage for both, the facade functions and the target.
421+ */
422+ #define MIMICPP_DETAIL_MAKE_INTERFACE_FACADE_OVERLOADS (op, traits, mock_name, fn_name, linkage, ...) \
423+ MIMICPP_DETAIL_FOR_EACH_EXT ( \
424+ op, \
425+ , \
426+ MIMICPP_DETAIL_NO_DELIMITER, \
427+ MIMICPP_DETAIL_STRIP_PARENS, \
428+ (traits, mock_name, fn_name, linkage), \
426429 __VA_ARGS__)
427430
428431/* *
@@ -431,13 +434,15 @@ namespace mimicpp
431434 * \param traits The interface traits.
432435 * \param mock_name The mock name.
433436 * \param fn_name The function name to be overloaded.
434- */
435- #define MIMICPP_DETAIL_MAKE_INTERFACE_FACADE (traits, mock_name, fn_name, ...) \
436- MIMICPP_DETAIL_MAKE_INTERFACE_FACADE_OVERLOADS (traits, MIMICPP_DETAIL_MAKE_METHOD_OVERRIDE, mock_name, fn_name, __VA_ARGS__) \
437- MIMICPP_DETAIL_MAKE_OVERLOADED_MOCK( \
438- traits, \
439- mock_name, \
440- fn_name, \
437+ * \param linkage The linkage for both, the facade functions and the target.
438+ */
439+ #define MIMICPP_DETAIL_MAKE_INTERFACE_FACADE (fn_op, traits, mock_name, fn_name, linkage, ...) \
440+ MIMICPP_DETAIL_MAKE_INTERFACE_FACADE_OVERLOADS (fn_op, traits, mock_name, fn_name, linkage, __VA_ARGS__) \
441+ MIMICPP_DETAIL_MAKE_OVERLOADED_MOCK( \
442+ traits, \
443+ mock_name, \
444+ fn_name, \
445+ linkage, \
441446 (MIMICPP_DETAIL_MAKE_SIGNATURE_LIST(__VA_ARGS__)))
442447
443448/* *
@@ -453,11 +458,29 @@ namespace mimicpp
453458 */
454459#define MIMICPP_MOCK_OVERLOADED_METHOD (fn_name, ...) \
455460 MIMICPP_DETAIL_MAKE_INTERFACE_FACADE ( \
461+ MIMICPP_DETAIL_MAKE_METHOD_OVERRIDE, \
456462 ::mimicpp::detail::interface_mock_traits, \
457463 fn_name##_, \
458464 fn_name, \
465+ , \
459466 __VA_ARGS__)
460467
468+ /* *
469+ * \brief Entry point for mocking a single interface method.
470+ * \ingroup MOCK_INTERFACES
471+ * \param fn_name The method name.
472+ * \param param_type_list The list of parameter types.
473+ * \param ... Optional qualifiers (e.g., ``const``, ``noexcept``).
474+ * \details
475+ * This macro defines a single mock object for one method signature and generates a corresponding
476+ * override method. The override method forwards calls to the mock object.
477+ * \snippet InterfaceMock.cpp interface mock simple
478+ */
479+ #define MIMICPP_MOCK_METHOD (fn_name, ret, param_type_list, ...) \
480+ MIMICPP_MOCK_OVERLOADED_METHOD ( \
481+ fn_name, \
482+ MIMICPP_ADD_OVERLOAD (ret, param_type_list __VA_OPT__ (, ) __VA_ARGS__))
483+
461484/* *
462485 * \brief Entry point for mocking an overloaded interface method with an explicit *this* pointer.
463486 * \ingroup MOCK_INTERFACES
@@ -476,27 +499,13 @@ namespace mimicpp
476499 */
477500#define MIMICPP_MOCK_OVERLOADED_METHOD_WITH_THIS (fn_name, ...) \
478501 MIMICPP_DETAIL_MAKE_INTERFACE_FACADE ( \
502+ MIMICPP_DETAIL_MAKE_METHOD_OVERRIDE, \
479503 ::mimicpp::detail::interface_mock_with_this_traits<self_type>, \
480504 fn_name##_, \
481505 fn_name, \
506+ , \
482507 __VA_ARGS__)
483508
484- /* *
485- * \brief Entry point for mocking a single interface method.
486- * \ingroup MOCK_INTERFACES
487- * \param fn_name The method name.
488- * \param param_type_list The list of parameter types.
489- * \param ... Optional qualifiers (e.g., ``const``, ``noexcept``).
490- * \details
491- * This macro defines a single mock object for one method signature and generates a corresponding
492- * override method. The override method forwards calls to the mock object.
493- * \snippet InterfaceMock.cpp interface mock simple
494- */
495- #define MIMICPP_MOCK_METHOD (fn_name, ret, param_type_list, ...) \
496- MIMICPP_MOCK_OVERLOADED_METHOD ( \
497- fn_name, \
498- MIMICPP_ADD_OVERLOAD (ret, param_type_list __VA_OPT__ (, ) __VA_ARGS__))
499-
500509/* *
501510 * \brief Entry point for mocking a single interface method with an explicit *this* pointer.
502511 * \ingroup MOCK_INTERFACES
0 commit comments