Я попытался создать функцию 'generateCombination', которая бы принимала два контейнера элементов и генерировала контейнер их комбинаций (например, {"hello"}, {"world", "friend"} производили {"hello world "," hello friend "}. Я пытался использовать SFINAE и decltype для оператора + (), чтобы определить тип возвращаемого значения, но я получил много ошибок с множеством разных попыток. Вот текущая версия:
#include <vector>
template<typename T, typename S>
using CombinationResult = decltype(operator+(T(),S()));
template<typename T, typename S>
using CombinationResultContainer = std::vector< CombinationResult<T, S>>;
template<typename T, typename S>
CombinationResultContainer<typename T::value_type,typename S::value_type> generateCombinations(T&& first, S&& second)
{
CombinationResultContainer<typename T::value_type, typename S::value_type> result;
result.reserve(first.size() * second.size());
for (auto& t : first)
for (auto& s : second)
result.push_back(t + s);
return result;
}
void main()
{
std::vector<std::string>v1;
std::vector<std::string>v2;
generateCombinations(v1,v2);
}
На данный момент я получаю ошибки:
C2672 «generateCombination»: не найдена соответствующая перегруженная функция
C2893 Не удалось специализировать шаблон функции 'std :: vector> generateCombitions (T &&, S &&)'