草庐IT

Metaprogramming

全部标签

c++ - 编译时字符串散列

我需要使用一个字符串作为ID来获取一些对象。在运行时实现这一点,并且运行良好。但这使得静态类型检查变得不可能,原因很明显。我在Google上搜索了在编译时计算字符串哈希和的算法:C++compile-timestringhashingwithBoost.MPL.这似乎是我的问题的完美解决方案,除了算法所需的sring应该由4个字符或逐个字符分成几部分,原因很明显。也就是说,我必须这样写,而不是通常的当前ID记录:hash_cstring>::value这绝对不能用。问题是,如何正确地将"object.method"等字符串传递给这个算法?谢谢大家。 最佳答案

c++ - 编译时字符串散列

我需要使用一个字符串作为ID来获取一些对象。在运行时实现这一点,并且运行良好。但这使得静态类型检查变得不可能,原因很明显。我在Google上搜索了在编译时计算字符串哈希和的算法:C++compile-timestringhashingwithBoost.MPL.这似乎是我的问题的完美解决方案,除了算法所需的sring应该由4个字符或逐个字符分成几部分,原因很明显。也就是说,我必须这样写,而不是通常的当前ID记录:hash_cstring>::value这绝对不能用。问题是,如何正确地将"object.method"等字符串传递给这个算法?谢谢大家。 最佳答案

c++ - 如何在 OpenCL 内核中使用 C++ 模板?

我是OpenCL的新手。我有一个使用模板的算法。它与OpenMP并行化配合得很好,但现在数据量已经增长,处理它的唯一方法是重写它以使用OpenCL。我可以轻松地使用MPI为集群构建它,但类似​​Tesla的GPU比集群便宜得多:)有没有办法在OpenCL内核中使用C++模板?是否可以通过C++编译器或某些工具以某种方式扩展模板,然后使用如此更改的内核函数?编辑。一种变通方法的想法是以某种方式从模板中的C++代码生成与C99兼容的代码。我发现以下关于Comeau的信息:ComeauC++4.3.3是一个完整且真实的编译器,可执行完整的语法检查、完整的语义检查、完整的错误检查和所有其他编译

c++ - 如何在 OpenCL 内核中使用 C++ 模板?

我是OpenCL的新手。我有一个使用模板的算法。它与OpenMP并行化配合得很好,但现在数据量已经增长,处理它的唯一方法是重写它以使用OpenCL。我可以轻松地使用MPI为集群构建它,但类似​​Tesla的GPU比集群便宜得多:)有没有办法在OpenCL内核中使用C++模板?是否可以通过C++编译器或某些工具以某种方式扩展模板,然后使用如此更改的内核函数?编辑。一种变通方法的想法是以某种方式从模板中的C++代码生成与C99兼容的代码。我发现以下关于Comeau的信息:ComeauC++4.3.3是一个完整且真实的编译器,可执行完整的语法检查、完整的语义检查、完整的错误检查和所有其他编译

c++ - 使用可变参数测试成员函数是否存在

所以我非常熟悉测试成员函数是否存在的范例。目前此代码有效:#include#includestructhas_mem_func_foo_impl{templatestructchk{};templatestaticstd::true_typehas_foo(chk*);templatestaticstd::false_typehas_foo(...);};templatestructhas_mem_func_foo:decltype(has_mem_func_foo_impl::templatehas_foo(nullptr)){};structbar{voidfoo(int){}};

c++ - 使用可变参数测试成员函数是否存在

所以我非常熟悉测试成员函数是否存在的范例。目前此代码有效:#include#includestructhas_mem_func_foo_impl{templatestructchk{};templatestaticstd::true_typehas_foo(chk*);templatestaticstd::false_typehas_foo(...);};templatestructhas_mem_func_foo:decltype(has_mem_func_foo_impl::templatehas_foo(nullptr)){};structbar{voidfoo(int){}};

c++ - 是否可以转换参数包中的类型?

是否可以转换参数包的类型并传递它?例如给定以下内容:templatestructX{};templatestructmake_pointer{ typedefT*type;};templatestructmake_pointer{typedefT*type;};我们能否定义一个模板magic或类似的东西,以便以下断言成立:typedefmagic::typeA;typedefXB;static_assert(is_same::value,":("); 最佳答案 是的,我们可以做到这一点templateclassList,templa

c++ - 是否可以转换参数包中的类型?

是否可以转换参数包的类型并传递它?例如给定以下内容:templatestructX{};templatestructmake_pointer{ typedefT*type;};templatestructmake_pointer{typedefT*type;};我们能否定义一个模板magic或类似的东西,以便以下断言成立:typedefmagic::typeA;typedefXB;static_assert(is_same::value,":("); 最佳答案 是的,我们可以做到这一点templateclassList,templa

c++ - 如何扩展对可变参数模板基类的调用?

我有一组非正交策略,它们都实现了一个通用的命名方法,这些策略添加了安全检查。我希望用户能够组合策略以允许更复杂的验证,而无需手动为每个组合案例创建策略。我的方法是创建一个新的策略类来组合其他策略类。下面的简化示例将C显示为组合类,这里组合了方法id。预期的结果是,在C上调用id时,依次调用每个基类的id。#includeusingnamespacestd;structA{voidid(){coutstructC:publicA,publicAs...{voidid(){A::id();As...::id();//Thislinedoesnotwork,itisillustrative.

c++ - 如何扩展对可变参数模板基类的调用?

我有一组非正交策略,它们都实现了一个通用的命名方法,这些策略添加了安全检查。我希望用户能够组合策略以允许更复杂的验证,而无需手动为每个组合案例创建策略。我的方法是创建一个新的策略类来组合其他策略类。下面的简化示例将C显示为组合类,这里组合了方法id。预期的结果是,在C上调用id时,依次调用每个基类的id。#includeusingnamespacestd;structA{voidid(){coutstructC:publicA,publicAs...{voidid(){A::id();As...::id();//Thislinedoesnotwork,itisillustrative.