- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个宏来生成指向另一个类的实例的指针以表示方向关系。
//#define BIND(A,B) ?
//can be modified a little, top header
BIND(CAT,DOG)
BIND(CAT,TREE)
BIND(CAT,RAT)
BIND(DOG,TREE)
//#define MACRO_CAT (need?) ?
//#define MACRO_DOG (need?) ?
上面是相关图。 (在实际情况下,有 100 多个类。)
箭头(红色)是Right<>
.箭头尾部(绿色)是Left<>
. (下面的片段)
上面的代码有可能创建宏MACRO_CAT
吗?/MACRO_DOG
自动这样? :-
//v should not be modified
class Cat{
MACRO_CAT
/* expand to :-
Right<Dog> dogs;
Right<Tree> trees;
Right<Rat> rats;
*/
};
class Dog{
MACRO_DOG
/* expand to :-
Right<Tree> trees;
Left<Cat> cats;
*/
};
这种 hackery 宏魔法对于维持具有最终性能的对象之间的关系非常有用。
我猜 X-macro是一个可能的解决方案,但我对此的经验相对较少。
我也读过:-
只是一个粗略的指导/想法表示赞赏。 (不需要完整代码,但我不介意)
编辑:在实际情况中,BIND
分散在许多 header 中。
这是 #include
的示例流量(下#include
上):-
最佳答案
在此解决方案中,我倾向于使用 TMP 而不是宏。
第一步是收集所有已声明的绑定(bind)。允许自由声明绑定(bind)并将它们分散到其他代码中可能是可行的。然而,它需要一些方法来保持和更新列表的状态,这几乎是 the most arcane thing you would want to do in C++ .所以我们不要那样做。
绑定(bind)文件将必须仅包含预处理器指令,以及对宏BIND
的调用。 ,如下:
BIND(Cat, Dog)
BIND(Cat, Tree)
BIND(Cat, Rat)
BIND(Dog, Tree)
换句话说,预处理文件必须只包含来自 BIND
的替代输出.然后我们可以将这些夹在 bindTop.h
之间和 bindBottom.h
:
template <class...>
struct pack;
// Stuff in bindTop.h
#define BIND(T, U) \
pack<struct T, struct U>,
using AllBindings = pack<
// End of bindTop.h, beginning of the binding file(s)
BIND(Cat, Dog)
BIND(Cat, Tree)
BIND(Cat, Rat)
BIND(Dog, Tree)
// End of the binding file(s), beginning of bindBottom.h
void // Pairs up with the last comma,
// will be silently ignored in further processing
>;
#undef BIND
// Stuff in bindBottom.h
现在我们在 AllBindings
中有了我们的绑定(bind)列表.
下一步:我们如何将成员注入(inject)到类中?我放弃了宏,而是使用成员继承。所以类定义如下:
struct Cat : WithBindings<Cat, AllBindings> { };
... 将最终继承自多个结构,这些结构将定义成员 Right<Dog> dogs
, Right<Tree> trees
, 和 Right<Rat> rats
,因此几乎可以访问它们,就好像它们是它的一样。
但是如何声明类型为Right<Dog>
的成员呢?必须叫dogs
?当然是宏!让我们为左基类和右基类制作空模板:
template <class T, class Binding>
struct MakeLeftMember { };
template <class T, class Binding>
struct MakeRightMember { };
然后我们将使用一个宏为我们的每个类专门化这些,带有类的名称和相应成员的名称:
#define BINDING_MEMBER_NAME(type_, memberName_) \
template <class T> struct MakeLeftMember<T, pack<type_, T>> { \
Left<type_> memberName_; \
}; \
template <class T> struct MakeRightMember<T, pack<T, type_>> { \
Right<type_> memberName_; \
}
Binding
预计将成为 pack<L, R>
之一我们用 BIND
定义的.现在实例化例如MakeLeftMember<T, pack<L, R>>
只有在 T
时才会 dispatch 到特化是R
,也就是说,绑定(bind)确实是 T 的左绑定(bind)。然后特化将生成适当命名的 Left<L>
。成员由 T
继承.在其他情况下,基本模板被选中,没有任何反应。
最后一个缺失的链接当然是WithBindings<T, AllBindings>
,它只是将所有绑定(bind)分派(dispatch)给成员制造商并继承生成的成员:
template <class T, class... Bindings>
struct WithBindings<T, pack<Bindings...>>
: MakeLeftMember <T, Bindings>...
, MakeRightMember<T, Bindings>... { };
我们开始了。 See it live on Coliru !
关于c++ - 创建宏以将 token (参数)一个一个地收集到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43468118/
我正在开发一个应用程序,它使用 OAuth - 基于 token 的身份验证。 考虑到我们拥有访问和刷新 token ,这就是流程的样子。 Api call -> intercepter append
如何取消标记此代码的输出? 类(class)核心: def __init__(self, user_input): pos = pop(user_input) subject = ""
当我使用命令 kubectl 时与 --token标记并指定 token ,它仍然使用 kubeconfig 中的管理员凭据文件。 这是我做的: NAMESPACE="default" SERVICE
我正在制作 SPA,并决定使用 JWT 进行身份验证/授权,并且我已经阅读了一些关于 Tokens 与 Cookies 的博客。我了解 cookie 授权的工作原理,并了解基本 token 授权的工作
我正在尝试从应用服务获取 Google 的刷新 token ,但无法。 日志说 2016-11-04T00:04:25 PID[500] Verbose Received request: GET h
我正在开发一个项目,只是为了为 java 开发人员测试 eclipse IDE。我是java新手,所以我想知道为什么它不起作用,因为我已经知道该怎么做了。这是代码: public class ecli
我正在尝试使用 JwtSecurityTokenHandler 将 token 字符串转换为 jwt token 。但它出现错误说 IDX12709: CanReadToken() returned
我已阅读文档 Authentication (来自 Facebook 的官方)。我仍然不明白 Facebook 提供的这三种访问 token 之间的区别。网站上给出了一些例子,但我还是不太明白。 每个
我的部署服务器有时有这个问题,这让我抓狂,因为我无法在本地主机中重现,我已经尝试在我的 web.config 中添加机器 key ,但没有成功远。 它只发生在登录页面。 我的布局:
我已经设法获得了一个简单的示例代码,它可以创建一个不记名 token ,还可以通过阅读 stackoverflow 上的其他论坛来通过刷新 token 请求新的不记名 token 。 启动类是这样的
如果我有以前的刷新 token 和使用纯 php 的访问 token ,没有 Google Api 库,是否可以刷新 Google Api token ?我在数据库中存储了许多用户刷新和访问 toke
我通过 Java 应用程序使用 Google 电子表格时遇到了问题。我创建了应用程序,该应用程序运行了 1 年多,没有任何问题,我什至在 Create Spreadsheet using Google
当我有一个有效的刷新 token 时,我正在尝试使用 Keycloak admin REST API 重新创建访问 token 。 我已经通过调用 POST/auth/realms/{realm}/p
我正在尝试让第三方 Java 客户端与我编写的 WCF 服务进行通信。 收到消息时出现如下异常: Cannot find a token authenticator for the 'System.I
在尝试将数据插入到我的 SQl 数据库时,我收到以下错误 System.Data.SqlServerCe.SqlCeException: There was an error parsing the
使用数据库 session token 系统,我可以让用户使用用户名/密码登录,服务器可以生成 token (例如 uuid)并将其存储在数据库中并将该 token 返回给客户端。其上的每个请求都将包
我最近注册了 Microsoft Azure 并设置了认知服务帐户。使用 Text Translation API Documentation 中的说明我能够使用 interactive online
我使用 IAntiforgery API 创建了一个 ASP.Net Core 2 应用程序。 这提供了一种返回 cookie 的方法。 客户端获取该 cookie,并在后续 POST 请求中将该值放
我正在使用 spacy 来匹配某些文本(意大利语)中的特定表达式。我的文本可以多种形式出现,我正在尝试学习编写一般规则的最佳方式。我有如下 4 个案例,我想写一个适用于所有案例的通用模式。像这样的东西
我无法理解 oauth 2.0 token 的原则处理。 我的场景是,我有一个基于 web 的前端后端系统,带有 node.js 和 angular 2。用户应该能够在此站点上上传视频。然后创建一些额
我是一名优秀的程序员,十分优秀!