C++17。使用 auto 处理相关的模板参数。代码排序的困难
C++17. Dealing with template parameters that are related using auto . Difficulties with code ordering
我正在创建一个 class 模板,该模板采用 2 个相关的模板参数。
一个实例将用于 mysql 数据库。模板初始化为类型 MYSQL 和
成员函数将 return MYSQL_RES *。
如果我创建一个带有 2 个参数的模板,这会很好地工作
例如
template<class T,class R> class foo
但由于 classes 是相关的,当指定类型 T 时,类型 R 是已知的。有什么办法
编码这个?
使用自动我可以让它工作,例如
template<class T> class foo{
public:
auto bar();
};
成员函数专门化,如
template<> auto foo<MYSQL>::bar(){MYSQL_RES *r;return r;};
但随后 运行 遇到代码排序问题。即模板<>自动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...
我正在创建一个 class 模板,该模板采用 2 个相关的模板参数。 一个实例将用于 mysql 数据库。模板初始化为类型 MYSQL 和 成员函数将 return MYSQL_RES *。 如果我创建一个带有 2 个参数的模板,这会很好地工作 例如
template<class T,class R> class foo
但由于 classes 是相关的,当指定类型 T 时,类型 R 是已知的。有什么办法 编码这个?
使用自动我可以让它工作,例如
template<class T> class foo{
public:
auto bar();
};
成员函数专门化,如
template<> auto foo<MYSQL>::bar(){MYSQL_RES *r;return r;};
但随后 运行 遇到代码排序问题。即模板<>自动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...