我是新手使用带结构的模板。我的主要目标是拥有自动变量内部结构。
更重要的是,我使用的是Funct.Methd(const auto,& Handler)的库函数。在这里你可以看到,在第一个参数的位置,我想传递(基于某些标准)由用户创建的任何const自动变量。我期望有超过20个变量,根据一些标准,任何5个将被使用。
在做了一些研究之后,我发现我可以使用模板来达到这个目的。请在下面找到示例代码:
#include <iostream>
#include <string>
template<typename T>
struct FTmr {
T query;
};
int main()
{
FTmr<T> df;
}
使用带结构的模板时出现错误use of undeclared identifier 'T'
。首先我需要解决上面的错误,然后我想使用const auto。
我希望用df名称实例化FTmr,然后访问查询变量。
df.query=<<const auto value>>
我将不胜感激。
答案 0 :(得分:2)
C ++中的所有变量从声明时起都有固定的类型。
模板不是类型。模板是关于如何制作类型的说明。
const auto
变量的类型由您分配给它的内容决定:
const auto x = foo();
x
的类型是固定的,它由foo()
的固定返回类型推导出来。语言就是为你找到的。
结构的成员是变量。它必须在结构声明时确定其类型。在使用之前,您不能推迟使用它。
struct Foo {
static const auto x = 3;
};
有效,因为x
的类型可以在声明x
的地方确定。
简而言之,const auto
并非如此。
有可能做你真正想做的事情,但它可能是 hard ,你可能缺乏描述你真正想要的词汇。我的建议是不要与语言作斗争并使用固定类型。
答案 1 :(得分:2)
主要内容是T
是什么?您必须在使用它之前定义它。之前的T
范围限定为上面的templated struct
。你也不能那样用;您必须以这种方式实例化模板化结构:
FTmr<int> df;
FTmr<char> df;
// ...
T是模板化参数,这意味着将变量传递给函数就意味着传递type
。因此编译将创建一个结构实例,其类型为int。
函数以这种方式将变量作为参数:
void foo(int x, char y, double z, struct foo& the foo, long* pBar, ...);
模板将types
改为参数:
template< class T> void Power(T& x);
template < typename U, typename V>
class Baz{
U _uval;
V _vVal;
};
因此,在实例化模板化的类/函数时,编译器将创建一个具有该类型的实例:
Baz<int, std::string> bistr;
编译器创建的实例:
class Baz{
int _uval;
std:: string _vVal;
};
答案 2 :(得分:0)
tl; dr:模板不会读你的想法。你仍然需要告诉他们该怎么做。
const auto
不是“变量类型”。 auto
是一个关键字,可根据您提供的某些信息启用某种类型的扣除。例如,它知道5
是int
(因为它们是规则),因此auto x = 5;
是可能的。
在这种情况下,您根本没有给它任何信息。您如何看待它应该知道T
使用什么? 我们甚至不知道!你知道吗? query
应该是什么?它该怎么办?仔细考虑,然后让您的计算机知道您的决定。