从专用化访问模板参数
Accessing template arguments from specialization
template<typename T, typename U>
struct A;
template<std::size_t I>
struct A<int, char[I]> {
using pointer = T*; // does not compile
};
int main() {
A<int, char[3]> a;
}
有没有办法从类模板专用化A<int, char[I]>
内部访问类型 T
(= int
(,而无需显式编写专用化中的类型?
像这样:
template<class T, class U, class=T, class=U>
struct A;
template<std::size_t I, class T, class U>
struct A<int, char[I], T, U> {
using pointer = T*;
};
工程。 如果有人实际上为第二个T
传递了一个类型并且U
问题发展,但是......
另一种方法是:
template<class T, class U>
struct A;
// get args from an instance!
template<class A>
struct A_Args;
template<class T_, class U_>
struct A_Args<A<T_,U_>> {
using T = T_; using U = U_;
};
template<class A>
using A_T = typename A_Args<A>::T;
template<class A>
using A_U = typename A_Args<A>::U;
// reflect on our troubles:
template<std::size_t I>
struct A<int, char[I]> {
using pointer = A_T<A>*;
};
我们有一个using
别名,可以从我们在专用化中使用的通用A
中提取参数。
此版本可以通过如下接口使通用版本:
template<std::size_t I, class Instance>
struct nth_template_arg;
template<std::size_t I, class Instance>
using nth_template_arg_t=typename nth_template_arg<I, Instance>::type;
使用注释,它仅适用于仅接受类型参数的模板。 (执行留作练习。 我可能会使用tuple_element
进行第一次传递;使用元组的缺点是它们是重类型,而重类型的元编程会降低性能,有时会导致其他问题。
简单地说,
#include <type_traits>
template<class T, class U>
struct foo;
template<class T, std::size_t Index>
struct foo<T, char[Index]>
{
using type = T;
};
int
main()
{
static_assert(std::is_same<foo<int, char[3]>::type, int>::value, "");
}
你可以试试这个:
template<typename T, typename U, std::size_t I>
struct A{
using pointer = T*;
};
相关文章:
- 使用不带参数的函数访问结构元素
- 从C++dll访问C#中的一行主要参数
- 函数是否可以访问传递给main()的参数
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 如何从其他功能C++访问参数?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 如何访问模板参数自己的模板参数?
- 如何访问QT中传递给程序的参数
- 从模板参数包实例化的访问类实现
- 限制多模板参数朋友函数可访问的类实例的范围
- 在将向量作为参数传递给函数后,我无法访问函数中向量的元素
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 从析构函数访问模板类构造函数的参数,可以吗?
- 仅当构造函数具有参数时,C++ 公共成员才能访问
- C/C++ 包含点的宏参数(成员访问运算符)
- 处于默认参数位置的 Lambda 无法访问好友成员。这是编译器错误吗?
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- 使用 cv::P oint 作为参数访问图像
- 在 c++ 中使用数组参数访问单个元素的字符
- 是否可以从参数访问成员名称