午前3時30分で、C ++のテンプレートに関する演習に取り組んでいます。この場合、私が間違っていることがわかりません。理解するのを手伝っていただけませんか。(私は2週間前に始めたC ++があまり得意ではありません)。
件名は次のとおりです。
[...]、関数テンプレートforeachをコーディングする必要があります。この関数を使用すると、この配列の各要素に対して関数を呼び出すことにより、配列をざっと見ることができます。関数は、配列の先頭のアドレス、関数の参照、および配列のサイズを引数として受け入れます。関数の参照は、次のプロトタイプに対応しています。voidfunc(const type&elem); さらに、関数foreachに渡され、タイプに関係なく、各要素を1行に1つずつ表示する関数printを提供する必要があります。
そしてここに私のコードがあります:
#ifndef __EX03_H_INCLUDED__
# define __EX03_H_INCLUDED__
#include <iostream>
#include <iomanip>
template<typename type>
void foreach(type tab[0], (*)(print(const type& elem)), type size)
{
int i;
for (i = 0; i != size; i++)
print(tab[i]);
}
template<typename type>
void print(const type& elem)
{
std::cout << elem << std::endl;
}
#endif /* !__EX03_H__ */
そして:
#include "ex03.hpp"
int main(void)
{
int tab[] = { 11, 3, 89, 42 };
foreach(tab, print<int>, 4);
std::string tab2[] = { "j’", "aime", "les", "templates", "!" };
foreach(tab2, print, 5);
return 0;
}
ex03.hppの提出のみが許可されており、これはテストメインにすぎません。私が間違っていることを理解したいと思います。ありがとう!
問題は、foreachテンプレート関数にあります。
修正されたex03.hppは次のようになります。
#ifndef __EX03_H_INCLUDED__
#define __EX03_H_INCLUDED__
#include <iostream>
// option 1
template<typename T1, typename T2>
void foreach(T1* arr, void (*fnc)(const T1&), T2 size) {
for (T2 i = 0; i < size; i++) {
(*fnc)(arr[i]);
}
}
// option 2
template<typename T1, typename T2>
void foreach(T1 arr[], void (&fnc)(const T1&), T2 size) {
for (T2 i = 0; i < size; i++) {
(*fnc)(arr[i]);
}
}
template<typename T1>
void print(const T1& element) {
std::cout << element << std::endl;
}
#endif /* !__EX03_H__ */
そしてmain.cpp:
#include "ex03.hpp"
#include <string>
int main() {
const size_t tab1Size = 4;
int tab1[tab1Size] = { 11, 3, 89, 42 };
foreach(tab1, print, tab1Size);
const size_t tab2Size = 5;
std::string tab2[tab2Size] = { "j’", "aime", "les", "templates", "!" };
foreach(tab2, print, tab2Size);
return 0;
}
しかし、他の人が前に言ったように、私は最初にc ++の基本を学ぶべきであることに同意します。そうすれば、より複雑なものをより理解しやすくなります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加