我一直在寻找用于C++数据库访问的OTL(Oracle,Odbc和DB2-CLI模板库).我不确定我传入的查询是否转换为底层数据库的参数化查询,或者它是否基本上只是将所有参数连接成一个大字符串并将查询传递给数据库.我看到你传递给它的查询可以包含参数的类型信息,但是当时和查询命中数据库之间会发生什么,我无法分辨.
我读它是基于 Boost的版本,但我不太确定它在实现时的意义.我知道Boost有他们自己的可变参数模板,但我认为c ++ 0x会使用自己的可变参数模板作为新元组.
编辑:发布我自己的答案,保留原来接受的答案...让我思考别名.
编辑:我的问题是针对在SFINAE(或其他)上下文中区分模糊性与成员var/func存在的可能性.我的问题不是关于如何制作一个has_member模板,而是关于检测模糊与存在之间的区别
是否有可能设置部分特化,以区分何时以不明确的方式访问成员(派生类的基础都具有成员)vs成员是否存在(派生类的基础都不具有成员) ?我只有在检测到歧义时才需要返回true ,但如果根本没有成员,或者只存在一个类,则需要返回true .这是我到目前为止所返回的,它对于模糊性(我想要的)返回true,对于只有一个具有该成员的类(也是我想要的)返回false,但如果两个类都没有该成员则返回true(argh!)
//for the sake of this example, ClassOne comes from a lib I don't control
struct ClassOne {
//some unknown members in here...
};
struct ClassTwo {
string member_var;
};
template<typename A>
struct helper : std::true_type {};
template<typename A, typename B>
struct merged_class : public A, public B {};
template<typename T, typename = void>
struct has_member_var : std::true_type {
//Member request ambiguous or neither class has member.
//I want to catch …Run Code Online (Sandbox Code Playgroud) 我正在编写一些代码来将C++类型转换为适合SQL DB的类型.我想识别类型,然后根据它是什么,生成适当的SQL代码.我不确定使用RTTI,auto或decltype可以在这方面做些什么.我有一些想法,但我不确定它们是否可行.
例如(我知道以下可能不是有效的C++,我只是试图了解这个想法):
if (decltype(some_var) == int) { do_stuff(); }
Run Code Online (Sandbox Code Playgroud)
要么
if (decltype(some_var) == decltype(1) { do_stuff(); }
Run Code Online (Sandbox Code Playgroud)
要么
switch(decltype(some_var)) {
case int:
do_int_stuff();
break;
case string;
do_string_stuff();
break;
case bool;
do_bool_stuff();
break;
}
Run Code Online (Sandbox Code Playgroud)
要么
string get_func_y(int var) {
...
return my_string;
}
string get_func_y(string var) {
...
return my_string;
}
string get_func_y(bool var) {
...
return my_string;
}
...
string SQL = get_func_y(some_var);
Run Code Online (Sandbox Code Playgroud)
任何这看起来都会起作用,或者有没有人就如何解决这个问题提出建议?提前感谢您提供的任何输入.
我遇到了一个使用可变参数函数模板的问题.我需要检查参数包的每个元素,打包元素,然后将所有打包的元素填充到元组中并返回它.以下是我想做的一般概念(返回类型只是占位符,不确定它们是什么):
template<typename A>
sometype func_helper(A a) {
//examine a, depending on type, do different stuff with it.
return modified_a;
}
template<typename... Args>
tuple<sometypes...> func(Args... args) {
return make_tuple(func_helper...(args));
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?