- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有以下代码:
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; }
};
现在我想使用这段代码:
int count = tuple_size<TR_AgentInfo>::value;
但是 gcc 给出了这个错误:
error: incomplete type std::tuple_size<TR_AgentInfo> used in nested name specifier
现在我能做什么?
最佳答案
如果您只想让您的一个类使用 std::tuple_size
,您可以简单地提供一个特化:
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
添加专门化,正是为了像您这样的情况。
如果您的实际类本身是模板化的,您只需将 2
替换为适当的结构即可。例如,对于建议 #1,您可以将 tuple_type
的 typedef 添加到您的类中。给这只猫剥皮的方法有很多。
关于c++ - tuple_size 和元组的继承类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7967746/
当为某个模板显式特化 tuple_size 和 tuple_element 时,我意识到 §14.5.1/4,它是这样写的 In a redeclaration, partial specializa
我有以下代码: class TR_AgentInfo : public tuple { public: TR_AgentInfo() {} TR_AgentInfo( const long lon
这个小程序 https://ideone.com/dqVJbN #include #include #include using namespace std; class MetaData {
我的问题很奇怪而且很短:为什么没有对 std::tuple_size 进行特化以供引用有充分的理由吗? (现在是动机) 我有很多代码看起来像: template::type>::value
为什么 tuple_size 是一个自由特征而不是类中的成员变量/typedef?后者导致 ODR 违规的风险要小得多。 是否有一个具体的用例,其中具有特征 tuple_size 比在类中定义此内联更
是 std::tuple_size 的特化和 std::tuple_element允许自定义类型?我想是的,但我想绝对确定,我找不到任何具体信息。 示例(省略了命名空间、成员函数和 get 重载):
我有两个关于辅助类的问题 std::tuple_size的 std::array . 首先,有一个constexpr size()类中的成员函数 std::array ,为什么需要 std::tupl
我的代码看起来像下面这样: #include class DoubleArray: std::array { public: void clear() { fill(0.0)
我在实现递归模板(模板结构中的函数)时遇到问题,它将被 std::tuple_size 终止。 这是代码片段(我简化了代码,以强调问题): template struct Helper
编辑附加:问题标题是“Visual Studio 编译器或 Clang 是否有不正确的行为”- 但已更改。 所以我在这里补充一下,clang 和 gcc 按照我的预期编译它,但 VS 没有。 我有以下
我在命名空间中有一个类模板 我在该 namespace 内有一个非成员函数,它返回一个 std::tuple的 std::shared_ptr(s)> 我调用了函数 F()并将其结果( std::tu
我有一个自定义类,它有一个类似元组的接口(interface)。因为我希望我的代码尽可能通用,所以我认为将我的算法基于函数 std::get、std::tuple_size 是个好主意>, std::
Clang 的行为“未定义模板 smthg”是否有(干净的)解决方法? 代码示例: https://godbolt.org/z/GGs7ndKE4 (复制/粘贴见下文) 额外的见解: 这个问题是不是
在下面的代码中,为什么第二个和第三个概念会产生编译错误? #include template concept IsPair1 = std::tuple_size::value == 2; temp
在下面的代码中,为什么第二个和第三个概念会产生编译错误? #include template concept IsPair1 = std::tuple_size::value == 2; temp
为什么 std::initializer_list不支持std::get<> , std::tuple_size和 std::tuple_element ?在constexpr中用得很多现在的表达式,
我是一名优秀的程序员,十分优秀!