tuple_size and an inhereted class from tuple?(tuple_size 和一个从元组继承的类?)
问题描述
我有以下代码:
class TR_AgentInfo : public tuple<
long long, //AgentId
string, //AgentIp
>
{
public:
TR_AgentInfo() {}
TR_AgentInfo(
const long long& AgentId,
const string& AgentIp,
)
{
get<0>(*this) = AgentId;
get<1>(*this) = AgentIp;
}
long long getAgentId() const { return get<0>(*this); }
void setAgentId(const long long& AgentId) { get<0>(*this) = AgentId; }
string getAgentIp() const { return get<1>(*this); }
void setAgentIp(const string& AgentIp) { get<1>(*this) = AgentIp; }
};
现在我想使用这段代码:
Now I want to use this code:
int count = tuple_size<TR_AgentInfo>::value;
但是 gcc 给出了这个错误:
but gcc give this error:
error: incomplete type std::tuple_size<TR_AgentInfo> used in nested name specifier
现在我该怎么办?
推荐答案
如果你只是想让你的一个类使用 std::tuple_size
,你可以简单地提供一个专业化:
If you just want your one class to work with std::tuple_size
, you can simply provide a specialization:
namespace std
{
template<> struct tuple_size<TR_AgentInfo>
{
static const size_t value = 2;
// alternatively, `tuple_size<tuple<long long, string>>::value`
// or even better, `tuple_size<TR_AgentInfo::tuple_type>::value`, #1
};
}
明确允许您向命名空间 std
添加特化,正是针对您的情况.
You are expressly allowed to add specializations to the namespace std
, precisely for situations like yours.
如果您的实际类本身是模板化的,您可以简单地将 2
替换为适当的构造.例如,对于建议 #1,您可以将 tuple_type
的 typedef 添加到您的类中.给这只猫剥皮的方法有很多.
If your actual class is itself templated, you can simply replace 2
by an appropriate construction. For example, for suggestion #1 you could add a typedef for tuple_type
to your class. There are many ways to skin this cat.
这篇关于tuple_size 和一个从元组继承的类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:tuple_size 和一个从元组继承的类?
基础教程推荐
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 设计字符串本地化的最佳方法 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17