gpt4 book ai didi

c++ - 如何检测类型是否为 std::tuple?

转载 作者:IT老高 更新时间:2023-10-28 22:23:52 26 4
gpt4 key购买 nike

为什么这段代码有奇怪的输出?如何以正确的方式测试类型?

#include <iostream>
#include <tuple>
#include <type_traits>

template<typename T> struct is_tuple : std::false_type {};
template<typename... Ts> struct is_tuple<std::tuple<Ts...>> : std::true_type {};

struct TraitBlock {
using BlockLocation = struct { std::uint64_t x, y, z; };
};

struct TraitRock {};

struct ItemTemplate{
static constexpr auto traits = std::make_tuple(
TraitBlock{},
TraitRock{}
);
};

int main(){
using A = std::tuple<char, int,double,char>;
std::cout << is_tuple<decltype(ItemTemplate::traits)>::value
<< is_tuple<decltype(std::make_tuple(
TraitBlock{},
TraitRock{}
))>::value
<< std::endl;
}

我使用 mingw64-gcc 7.2.0 和 -std=c++17,我得到输出“01”为什么我得到两个不同的输出?他们不是同一类型吗?

最佳答案

decltype(ItemTemplate::traits)const std::tuple<TraitBlock, TraitRock> .

所以你必须在某个地方处理 cv 限定符。

关于c++ - 如何检测类型是否为 std::tuple?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46093529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com