metaprogramming 相关问题

元编程是重新编程编程环境的能力,就像宏或元类一样。

这个“inline for”有多少会在 Zig 的 comptime 中被缩写?

我正在尝试迭代结构体的字段并根据字段的类型执行不同的操作: const std = @import("std"); 常量 S = 结构 { 字母:u8...

回答 1 投票 0

条件变体类型取决于类模板参数

我有一个类模板,本质上是想为将公开给 API 用户的变体类型创建一个模板别名: 模板 类执行器{ ...

回答 1 投票 0

如何在 Scala 3 反射中的类主体中获取正确应用的类型?

假设我正在使用 Scala 3 反射来反射这个类: 类 Foo[T](val 事物: T): var 存储:选项[T] = 无 假设我用给定的类型 Foo[Boolean] 进行反映,并且我得到了

回答 1 投票 0

如何构造一个元组,其中包含的每个对象只有一个元素?

我有一个包含多个模板类的元组,其中只有类的模板发生变化,如下所示: 模板 类 T,类 ...Ts> 触发映射类; 模板 我有一个包含多个模板类的元组,其中只有类的模板发生变化,如下所示: template<template<class> class T, class ...Ts> class TriggerMap; template<template<class> class T, class ...Ts> class TriggerMap<T, std::tuple<Ts...>> { public: TriggerMap(ThreadPool &_tp) : m_map(_tp) {} ~TriggerMap() = default; private: using TriggerMapImp = typename tuple_apply_template<T, Ts...>::type; TriggerMapImp m_tup; }; 与tuple_apply_template: template<class, class> struct tuple_prepend; template<class T, class ...Ts> struct tuple_prepend<T, std::tuple<Ts...>> { using type = std::tuple<T, Ts...>; }; template<template<class> class T, class ...Ts> struct tuple_apply_template; template<template<class> class T, class _T, class ...Ts> struct tuple_apply_template<T, _T, Ts...> { using type = typename tuple_prepend<T<_T>, typename tuple_apply_template<T, Ts...>::type>::type; }; template<template<class> class T, class _T> struct tuple_apply_template<T, _T> { using type = std::tuple<T<_T>>; }; 我想用对象引用构造我的对象,在本例中是对象ThreadPool,如何以有效的方式更改TriggerMap的构造函数(实际上不起作用)以实现运行时优化? 要编译构造函数,我将其更改为: TriggerMap(ThreadPool &_tp) : m_map(T<Ts>(_tp)...) {}

回答 1 投票 0

基本模板问题:`const const int*` 在 `const int` 中衰减

以下代码 模板 结构A { 静态 void f() {std::cout << "A “;} }; 模板 结构体A { 静态 void f() {...

回答 1 投票 0

从泛型内部类型派生所有转换运算符

我正在尝试使用新类型模式,但我希望它仅具有语义含义,而不强制表示。那么我们说 结构体金额(T); 所以稍后我可以使用 Amount 或 Amo...

回答 1 投票 0

模板参数推导在此 fmt 库的 format_string 中如何工作?

我在尝试理解 fmt 库时遇到了一些困难。 我们从打印函数开始: fmt::print("你好,{}",a); 这是打印的定义: 模板 我在尝试理解 fmt 库时遇到了一些困难。 让我们从print函数开始: fmt::print("Hello, {}", a); 这是print的定义: template <typename... T> FMT_INLINE void print(format_string<T...> fmt, T&&... args) { // Implementation } print函数接受format_string<T...>作为参数。所以我们可以在编译时用 T... 做一些事情。 但是如何在编译时推导出T...呢? 以下是format_string的实现方式(代码取自10.0.0版本)。对于编译时格式字符串,它有一个隐式 constexpr 构造函数,该构造函数采用 string_view 兼容类型作为参数。 template <typename... Args> using format_string = basic_format_string<char, type_identity_t<Args>...>; template <typename Char, typename... Args> class basic_format_string { private: basic_string_view<Char> str_; public: template <typename S, FMT_ENABLE_IF( std::is_convertible<const S&, basic_string_view<Char>>::value)> FMT_CONSTEVAL FMT_INLINE basic_format_string(const S& s) : str_(s) { static_assert( detail::count< (std::is_base_of<detail::view, remove_reference_t<Args>>::value && std::is_reference<Args>::value)...>() == 0, "passing views as lvalues is disallowed"); #ifdef FMT_HAS_CONSTEVAL if constexpr (detail::count_named_args<Args...>() == detail::count_statically_named_args<Args...>()) { using checker = detail::format_string_checker<Char, remove_cvref_t<Args>...>; detail::parse_format_string<true>(str_, checker(s)); } #else detail::check_format_string<Args...>(s); #endif } basic_format_string(runtime_format_string<Char> fmt) : str_(fmt.str) {} FMT_INLINE operator basic_string_view<Char>() const { return str_; } FMT_INLINE auto get() const -> basic_string_view<Char> { return str_; } }; 但是,我在源代码中并没有找到用户自定义的推导指南之类的东西。那么模板类 Args... 的类型参数 basic_format_string 是如何推导出来的呢? 扩展别名format_string给你 template <typename... T> FMT_INLINE void print(basic_format_string<char, type_identity_t<T>...> fmt, T&&... args) { // Implementation } type_identity_t<T> 也是 type_identity<T>::type 的别名: template <typename... T> FMT_INLINE void print(basic_format_string<char, type_identity<T>::type...> fmt, T&&... args) { // Implementation } 现在,在第一个函数参数中,模板参数T仅出现在嵌套名称说明符的左侧,这使其成为非推导上下文,这意味着函数参数将不会用于推导 T。 所以,第一个函数形参不参与模板实参推导。相反,T仅从其他函数参数推导而来,即T...只是从T&&... args转发参考包推导出来的模板参数。

回答 1 投票 0

Swift Show Meta Audience Network 原生广告

我正在使用 Facebook 的 Audience Network SDK 在我的应用程序中展示原生广告。问题是: 我们应该在哪里获取投标有效负载字符串来填充该字段? 代码: 私有函数 loadFacebookAd() { ...

回答 1 投票 0

摆脱 C++ 中令人讨厌的函数类型的可能方法?

所以我最近接触到了C++中所谓的“令人厌恶的函数类型”的怪诞(据我所知源自这篇论文:https://www.open-std.org/jtc1/sc22 /wg2...

回答 1 投票 0

如何从 NimNode ident("MyType") 获取宏中对象类型 `MyType` 的所有字段

在 nim 中,我有一个宏,它接受 proc 定义并根据该定义和一些语句生成一个 proc。 语法如下: 类型 A = 对象 名称:字符串 类型 B = 对象 名称:str...

回答 1 投票 0

有没有系统化的方法来简化或减少macro_rules?

我想使用宏来模拟 cpp 中的捕获规则作为学习练习,我意识到 rustfmt 并不总是表现得很好。我也想知道是否有一种简化或使用零件的方法...

回答 1 投票 0

简化编译时二叉树类型的创建

在为较大的 C++ 项目创建二叉树类型的上下文中,我需要创建一个表示每个级别中的节点的编译时类型。 有谁知道,使用最新的标准,如果...

回答 1 投票 0

为什么Boost MPL有积分常数?

既然可以将整数值作为模板参数并对它们进行算术运算,那么 boost::mpl::int_<> 和其他整数常量背后的动机是什么?这个动机是否...

回答 2 投票 0

为什么我不能在“module”块内使用define_method的方法调用?

我有一个带有 attr_reader - type_slugs (返回字符串数组)的模型类,我想用它来生成几个方法。 例如: 模块订单 模块扩展 模块订购 ...

回答 1 投票 0

sizeof(E) 是一种惯用的 SFINAE 技术来检查 E 是否是有效表达式吗?

我刚刚知道如何检查 if 运算符<< is provided for a type. template T& lvalue_of_type(); 模板 T rvalue_of_type(); 模板 斯特...

回答 3 投票 0

SFINAE 有什么好的用途?

我想了解更多模板元编程。我知道 SFINAE 代表“替换失败不是错误”。但有人可以告诉我 SFINAE 的好用处吗?

回答 10 投票 0

这个数组大小宏/函数模板如何工作?

我在 PVS-Studio 与 Chromium 文章中看到了这个片段 模板 char (&ArraySizeHelper(T (&array)[N]))[N]; #定义数组大小(数组)(sizeof(

回答 3 投票 0

在 ruby Thread 对象中包装代码块

我们需要在 gem 中实现需要将代码片段全局注入到 Thread.new 块语句中的功能。让我们在这里留下关于原因的讨论:) 如果我定义如下: 模块 MyTh...

回答 1 投票 0

Scala 3:查找具有给定注释的函数

对于 Scala 3 宏,有谁知道如何查找具有给定注释的所有函数? 例如: @水果 def apple(): Int = ??? @水果 def 香蕉(): Int = ??? @水果 def 椰子(): Int =...

回答 2 投票 0

DolphinDB:sqlCol 和 sqlColAlias 的区别

这是我的脚本,其中分别使用了sqlCol和sqlColAlias: 代码=`000905 sql((sqlCol(`date),sqlCol(代码,比率,`ret)),表 ).eval() sql((sqlCol(`日期),sqlColAlias(,...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.