【发布时间】:2025-12-26 04:05:17
【问题描述】:
在这篇check type of element in stl container - c++ 的帖子中,用户UncleBens 展示了如何使用结构same_type 和函数containers_of_same_type 来检查容器的类型
我正在尝试做同样的事情,除了我想使用结构而不是使用检查容器的函数。我有以下代码,但它给了我错误:
// Working
template<typename X, typename Y>
struct SameType {
enum { result = 0 };
};
// Working
template<typename T>
struct SameType<T, T> {
enum { result = 1 };
};
// This struct is not working
template<typename C1, typename C2>
struct SameContainerType {
enum { value = SameType<typename C1::value_type, typename C2::value_type>::result };
};
#include <iostream>
#include <vector>
#include <list>
int main() {
std::cout << SameType<int, int>::result << std::endl;; // 1
std::cout << SameType<int, double>::result << std::endl;; // 0
std::cout << SameContainerType<std::vector<int>(), std::list<int>()>::value; // error
}
错误是,C1 和 C2 必须是命名空间或类才能使用 ::
【问题讨论】:
-
使用枚举来定义结构中的值已经过时了。您可以改用
static constexpr变量。 -
我是新手。谢谢你的意见,我会考虑的。
-
另外,只是继承自
std:true_type和 false 类型。所有酷的孩子都会这样做。template<typename X, typename Y> struct SameType:std::false_type{};;而不是result,它暴露了value,并且实例也有一堆constexpr操作。 -
是的,我在看介绍性讲座时已经看到了这种继承模式,但它对我来说仍然是新的,我会将它合并到我的结构中。 Ty 的建议
标签: c++ template-meta-programming