in cppwinrt/component_writers.h [1071:1166]
static void write_component_member_definitions(writer& w, TypeDef const& type)
{
auto type_name = type.TypeName();
for (auto&&[factory_name, factory] : get_factories(w, type))
{
if (factory.activatable || factory.composable)
{
if (!factory.type)
{
continue;
}
auto format = R"( %::%(%)
{
throw hresult_not_implemented();
}
)";
for (auto&& method : factory.type.MethodList())
{
method_signature signature{ method };
auto& params = signature.params();
if (factory.composable)
{
params.resize(params.size() - 2);
}
if (params.empty())
{
continue;
}
w.write(format,
type_name,
type_name,
bind<write_implementation_params>(signature));
}
}
else if (factory.statics)
{
auto format = R"( % %::%(%)%
{
throw hresult_not_implemented();
}
)";
for (auto&& method : factory.type.MethodList())
{
method_signature signature{ method };
w.async_types = signature.is_async();
auto method_name = get_name(method);
w.write(format,
signature.return_signature(),
type_name,
method_name,
bind<write_implementation_params>(signature),
is_noexcept(method) ? " noexcept" : "");
}
}
}
for (auto&&[interface_name, info] : get_interfaces(w, type))
{
if (info.base)
{
continue;
}
w.generic_param_stack.insert(w.generic_param_stack.end(), info.generic_param_stack.begin(), info.generic_param_stack.end());
for (auto&& method : info.type.MethodList())
{
auto format = R"( % %::%(%)%
{
throw hresult_not_implemented();
}
)";
method_signature signature{ method };
w.async_types = signature.is_async();
auto method_name = get_name(method);
w.write(format,
signature.return_signature(),
type_name,
method_name,
bind<write_implementation_params>(signature),
is_noexcept(method) ? " noexcept" : "");
}
w.generic_param_stack.resize(w.generic_param_stack.size() - info.generic_param_stack.size());
}
}