是否有可能编写一个c ++模板函数,它接受不同类型的可变数量的输入变量(输入的数量可以限制为10)?例如,获取一个sql_exec()执行sql查询字符串的函数,并将结果行保存在所提供类型的std向量中,即
std::vector<double> x,y;
std::vector<std::string> s;
std::string query="select * from ...";
sql_exec(query, s,x,y); // error if less than 3 rows or conversion not possible
Run Code Online (Sandbox Code Playgroud)
现在我的天真方法将是(限于最多2个向量)
struct null_type {};
template <typename T1=null_type, typename T2=null_type>
void sql_query(const std::string& query_str, std::vector<T1>& col1,
std::vector<T2>& col2) {
...
}
Run Code Online (Sandbox Code Playgroud)
当然这是愚蠢的,因为我没有告诉函数有关默认参数,我们得到
error: default template arguments may not be used in function templates
Run Code Online (Sandbox Code Playgroud)
但实际上它用gcc编译-std=c++0x.但是,显然sql_query()仍然不采用可变长度输入,需要使用2个向量调用.此外,我想在大多数当前的编译器上都有可移植的东西.我忽略了什么明显的东西?我知道我可以改变设计,也许可以使用boost::tuple或其他东西,但我喜欢这么简单的界面.
如何解析大量使用javascript的html文档?我知道python中有一些库可以解析静态xml/html文件,我基本上是在寻找一个程序或库(甚至是firefox插件),它读取html + javascript,执行javascript位并输出html代码而不用javascript所以如果在浏览器中显示它会看起来相同.
举个简单的例子
<a href="javascript:web_link(34, true);">link</a>
Run Code Online (Sandbox Code Playgroud)
应该用javascript函数返回的适当值替换,例如
<a href="http://www.example.com">link</a>
Run Code Online (Sandbox Code Playgroud)
一个更复杂的例子是一个保存的facebook html页面,里面堆满了大量的javascript代码.
可能与 如何使用Node.js"执行"HTML + Javascript页面有关, 但我真的需要Node.js和JSDOM吗?稍微相关的是 用于渲染HTML和javascript的Python库, 但我对渲染纯html输出不感兴趣.
在c ++中定义全局或静态数组时,它的内存不会立即保留在程序的开头,而只会在我们写入数组时保留.我发现令人惊讶的是,如果我们只写入数组的一小部分,它仍然不会保留整个内存.考虑以下小例子,它稀疏地写入全局数组:
#include <cstdio>
#include <cstdlib>
#define MAX_SIZE 250000000
double global[MAX_SIZE];
int main(int argc, char** argv) {
if(argc<2) {
printf("usage: %s <step size>\n", argv[0]);
exit(EXIT_FAILURE);
}
size_t step_size=atoi(argv[1]);
for(size_t i=0; i<MAX_SIZE; i+=step_size) {
global[i]=(double) i;
}
printf("finished\n"); getchar();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
现在为不同的步长执行此操作并查看top的输出,我们得到例如:
./a.out 1000000
./a.out 100000
./a.out 10000
./a.out 1000
./a.out 100
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15718 user 20 0 1918m 1868 728 S 0 0.0 0:00.00 a.out
15748 user 20 0 …Run Code Online (Sandbox Code Playgroud) 为什么avx sqrt(非压缩)指令有三个操作数?
vsqrtsd xmm1, xmm2, xmm3
Run Code Online (Sandbox Code Playgroud)
这是否意味着什么xmm1=xmm2=sqrt(xmm3)?
编辑:下面详细解答,但简而言之,装配线意味着:
xmm1.low = sqrt(xmm3.low);
xmm1.high = xmm2.high;
Run Code Online (Sandbox Code Playgroud) c++ ×2
arrays ×1
assembly ×1
avx ×1
contiguous ×1
global ×1
html ×1
instructions ×1
javascript ×1
python ×1
simd ×1
static ×1
templates ×1
x86 ×1