У меня проблема с оборачиванием шаблонного класса в не шаблонный;
Я пытаюсь заставить этот код работать:
my_class.hpp
#ifndef MY_CLASS_HPP
#define MY_CLASS_HPP
#include <vector>
#include <iostream>
class VectorPrinter {
private:
template<class value_type>
static std::vector<value_type> vec;
public:
template<class value_type>
VectorPrinter(const std::vector<value_type>& vec_)
{
vec = vec_
for (std::size_t i = 0; i<vec.size(); ++i)
std::cout << vec[i] << std::endl;
}
};
#endif /* MY_CLASS_HPP */
main.cpp
#include "my_class.hpp"
#include <string>
int main() {
std::vector<int> v1{1, 2, 3, 4, 5};
std::vector<std::string> v2{"Hello", "world", "!"};
std::vector<double> v3{2.5, 7.3, -5.1};
VectorPrinter vp1(v1);
VectorPrinter vp2(v2);
VectorPrinter vp3(v3);
return 0;
}
Я получаю следующее сообщение об ошибке при попытке компиляции (я пробовал -std = c ++ 11, -std = c ++ 14, -std = c ++17: без разницы, без разницы и при переключении с g ++ на clang):
./my_class.hpp:19:5: error: cannot refer to variable template 'vec' without a template argument list
Теперь: моя цель - обойти определение VectorPrinter как класса шаблона или, альтернативно, избегать указания аргумента шаблона в случае VectorPrinterне может быть не шаблонным;так что моя проблема находится в области вывода переменной шаблона или аргумента шаблона.
Это всего лишь тест для моего дипломного проекта;В конце концов мне нужно добиться возможности определить библиотеку шаблонов для ГСЧ и инкапсулировать эти классы в более сложные классы, которые выполняют прямое моделирование Монте-Карло.Итак, в конце я хотел бы что-то вроде:
template <class engineType>
class RngObject {
// ...
};
class Ensemble {
private:
template<class engineType> RngObject<engineType> rng;
// ...
};
Было бы довольно скучно определять каждый класс, который инкапсулирует ГСЧ в качестве шаблона;более того, меня просят избегать использования динамического полиморфизма времени, как минимум на этом этапе.
Я надеюсь, что кто-то может дать мне несколько полезных советов.Спасибо