amo*_*sch 5 c++ templates class constants
我想做这样的事情:
template<template<int d, class>
class container,
int dim = d, typename content_data_type>
class MyClass {
};
Run Code Online (Sandbox Code Playgroud)
我的编译器告诉我这是不可能的,因为“d”不是在以下范围之外定义的:
template<int d, class> class container
Run Code Online (Sandbox Code Playgroud)
也许还有另一种方法可以做到这一点吗?
预先感谢您对此主题的任何帮助。
更新:
@ Rook:我想稍后在专业化中访问“dim”和“content_data_type”参数
例如
普通班:
template<template<int d, class>
class container>
class MyClass {
};
Run Code Online (Sandbox Code Playgroud)
规格 班级:
template<>
class MyClass<vec> {
vec c; // Error: vec needs template parameters
};
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,因为我使用了我的模板类“vec”而没有模板参数,我希望编译器推断出模板参数,例如当我使用
MyClass<vec<3, float> >
Run Code Online (Sandbox Code Playgroud)
那么变量“c”应该具有类型
vec<3, float>
Run Code Online (Sandbox Code Playgroud)
因为这不起作用,我想我可以创建两个显式模板参数“dim”和“content_data_type”,我可以在专业化类中访问它们,如下所示:
template<template<int d, class t>
class container,
int dim = d, typename content_data_type = t>
class MyClass<vec> {
vec<dim, content_data_type> c;
};
Run Code Online (Sandbox Code Playgroud)
...再次抱歉,对于最初的问题不够具体:)
我认为你所做的没有意义,所以答案是“不”。
模板参数container是类模板,而不是类。当MyClass被实例化时,它的参数是整个模板,而不仅仅是它的一个实例。因此不可能将 的维度默认MyClass为“的维度container”,因为container它自己的模板参数没有值。您的类MyClass可以创建和使用container具有不同值的一个或多个实例d,但没有特别给出其中任何一个实例,而是给出了模板。
以此类推,假设您将一个函数指针f作为参数传递给函数g。然后,您不能f在 的定义中使用“传递给”的参数g。该函数g可以使用f不同的参数调用一次或多次,但不会给出任何特定的调用,而是给出该函数。
从您的更新来看:
例如当我使用
MyClass<vec<3, float> >
你不用MyClass<vec<3, float> >,就没有这样的东西。正如我所说,MyClass采用模板而不是类。vec是模板,vec<3, float>是类。听起来也许您根本不需要模板作为模板参数。
| 归档时间: |
|
| 查看次数: |
1321 次 |
| 最近记录: |