我有一些基本的模板编程错误。
我在main.cpp
中有此代码:
#include <string>
#include <iostream>
#include "arrapp.h"
#include <algorithm>
#include <vector>
const int max = 1000;
int main()
{
int your_mark = 1;
/* 2-es*/
int s[] = {3, 2};
array_appender<int> ia ( s, sizeof( s ) / sizeof( s[ 0 ] ) );
for( int i = 0; i < max - 1; ++i )
{
ia.append( s, sizeof( s ) / sizeof( s[ 0 ] ) );
}
std::string hw[] = { "Hello", "World" };
std::string langs[] = { "C++", "Ada", "Brainfuck" };
std::string x[] = { "Goodbye", "Cruel", "World" };
array_appender<std::string> sa ( hw, sizeof( hw ) / sizeof( hw[ 0 ] ) );
sa.append( langs, sizeof( langs ) / sizeof( langs[ 0 ] ) );
sa.append( x, sizeof( x ) / sizeof( x[ 0 ] ) );
const array_appender<std::string> ha( hw, sizeof( hw ) / sizeof( hw[ 0 ] ) );
if ( max * 2 == ia.size() && 3 == ia.at( max ) && 2 == ia.at( 3 ) &&
&( s[ 0 ] ) == &(ia.at( max / 2 ) ) && 2 == ha.size() && 8 == sa.size() &&
"C++" == sa.at( 2 ) && 7 == sa.at( 5 ).length() && &( ha.at( 0 ) ) == hw )
{
your_mark = ia.at( max + 1 );
}
std::cout << "Your mark is " << your_mark;
std::endl( std::cout );
}
我必须通过编写"arrapp.h"
来解决这个问题。所以我创建了这个:
#ifndef arrapp_H
#include <algorithm>
#include <list>
#include <vector>
#include <array>
template <typename T>
T const& array_appender (std::vector <T const&> v, T const& size) {
std::vector<T*> vec [size]= {};
for( int idx = 0; idx < size; ++idx)
{
std::cout << "value of v: " << v[idx] << std::endl;
vec.add(v[idx]);
}
return vec;
}
#endif // arrapp_H
但是,如果我使用此命令,则会收到错误main.cpp|14|error: expected ';' before 'ia'|
。所以这是行不通的。我该如何创建这些模板内容才能正常工作?我被误解了吗,array_appender
这里没有我写的那样?
答案 0 :(得分:1)
先尝试一些简单的方法。您似乎错过了一些基本概念,因此我将尝试为您提供一个基本示例。
模板功能:
template <typename T>
T add(const T& a,const T& b) { return a+b; }
模板类:
template <typename T>
struct adder {
T result;
adder(const T& a, const T& b) : result(a+b) {}
};
可以这样使用:
int a = 4;
int b = 5;
std::cout << add(a,b);
auto x = adder<int>(a,b);
std::cout << x.result;
我不得不提到,我对所有这些答案都不感到骄傲。您应该意识到,您不会在这里提出问题来学习基础知识,也无法完全解释进入这两个简单示例的所有内容,因此我可以写两章(老实说,我不能那样做;)。可悲的事实是,您将不得不阅读一些书籍。
答案 1 :(得分:0)
如果我理解正确,那么您需要编写array_appender
,使其与您已经拥有的main.cpp
一起使用。
您已经定义了模板函数,但需要一个模板类,如下所示:
template<typename T>
class array_appender {
public:
array_appender(T* array, size_t size) {
append(array, size);
}
void append(T* array, size_t size) {
// ...
}
T at(size_t index) {
// ...
}
size_t size() {
// ...
}
private:
std::vector<T> data;
}