【发布时间】:2020-02-14 08:09:27
【问题描述】:
我试图从数学基础有序对开始从头开始实现一个 n 元组 其中 n 元组 (a,b,c) = ordered_pair(a,ordered_pair(b,c)) 和有序对是一个集合表示 IE。 ordered_pair(a,b) = 设置{{a},{a,b}}
这里是ordered_pair的代码
#include <iostream>
#include <set>
#include <boost/variant.hpp>
using namespace std;
template <typename T, typename U, typename Z>
class orderd_pair{
//typedef boost::variant<int,std::string,double> cell;
private:
set<set<Z>> opair;
set<T> first;
set<U> second;
public:
set<set<Z>> Orderd_pair(T first_element, U second_element){
first.insert(first_element);
second.insert(first_element);
second.insert(second_element);
opair.insert(first);
opair.insert(second);
return opair;
}
//TO DO void print_elements(std::set<std::set<cell>> opair);*/
};
问题是当试图实现每个ordered_pair的元组集时必须嵌套,即 对于三元素元组集{{a},{a,{{b},{b,c}}}} 和更多元素,它将嵌套更多,使其难以使用,我该如何解决这个问题?
我还使用 boost::variant 来支持 int、std::string 和 double 数据类型。
【问题讨论】:
-
你为什么要这样做?如果它很难使用,为什么不使用
std::tuple? -
您是故意将您的实现限制在
int, std::string, double还是您只是不知道如何使其通用?它们是否真的应该是可互换的(即是否允许用 int 替换字符串,因为这就是变体正在做的事情)
标签: c++ templates metaprogramming stdset