C++17.处理使用 auto 相关的模板参数.代码排序困难

C++17. Dealing with template parameters that are related using auto . Difficulties with code ordering

本文关键字:参数 代码 排序 处理 auto C++17      更新时间:2023-10-16

我正在创建一个类模板,它需要 2 个模板参数,但相关。 一个实例化将用于 mysql 数据库。模板使用 MYSQL 类型初始化,并且 成员函数将返回 MYSQL_RES *。 如果我创建一个带有 2 个参数的模板,这很好用 例如

template<class T,class R> class foo

但由于类是相关的,当指定类型 T 时,类型 R 是已知的。有什么办法可以 编码这个?

使用自动我可以让它工作,例如。

template<class T> class foo{
public:
auto bar();
};

具有成员功能专业化,例如

template<> auto foo<MYSQL>::bar(){MYSQL_RES *r;return r;};

但随后遇到了代码排序问题。 即模板<> auto foo::bar 必须在使用前实现,而不是在单独的 cpp 文件中实现。

我试过做一个前向声明 例如

template<> auto foo<MYSQL_RES>::bar();

但这行不通。

有没有人有优雅的方法来解决这个问题?

谢谢。

您可以创建特征来帮助您:

template<class T> struct myFooTrait;
template<class T> class foo
{
public:
using R = typename myFooTrait<T>::type;
R bar();
};
class MYSQL;
class MYSQL_RES;
template<> struct myFooTrait<MYSQL>
{
using type = MYSQL_RES *;
};
template<>
auto foo<MYSQL>::bar() -> R { MYSQL_RES *r = /*..*/;return r;}
// Other specializations...