如何初始化参数化模板类的静态成员

2023-12-13

我不认为我的问题重复this one.

我尝试做的事情:

template<const char* szFunctionName>
class CReentranceLock
{
public:
    CReentranceLock(){}
    ~CReentranceLock(){}
    bool isLocked(){return s_bLock;}
    void setLocked(bool b)
    {
        const bool Result=(bool)InterlockedCompareExchange(
                    (unsigned long *)&s_bLock, b, !b);
    }

private:
    static bool s_bLock;
};

template<const char* szFunctionName>
bool CReentranceLock<const char*szFunctionName>::s_bLock=false; 
// error C2146: syntax error : missing ',' before identifier 'szFunctionName'

这意味着 CReentranceLock 的所有实例都将拥有自己的静态,依赖于作为模板参数传递的函数名称的 const char 地址。

可以这样使用:

void CMyObject::InAnyFunction()
{
    const char* szFunctionName = __FUNCTION__; 
    CReentranceLock<szFunctionName> lock; // Edit: <- this doesn't work
    if(lock.isLocked()) return;
    lock.setLocked(true);
    /// business code
   lock.setLocked(false);
}

好吧,这只是理论...... 不幸的是,这不能在 Visual 2010 下编译,在我尝试初始化静态数据的行。

error C2146: syntax error : missing ',' before identifier 'szFunctionName'

我做错了什么或想错了什么?

PS:我没有处理重入闻起来像一个糟糕的设计(在 MFC 中)的事实,我知道,我迷失在其中;-)

Edit:虽然下面的答案很好,并且定义编译...我的使用CMyObject::InAnyFunction()使用 const char * 作为编译时可用的模板参数似乎是错误的。 :-(


bool CReentranceLock<const char*szFunctionName>::s_bLock=false; 

这应该是:

bool CReentranceLock<szFunctionName>::s_bLock=false; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何初始化参数化模板类的静态成员 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 您能解释一下 bash shell 中的数学语法吗?

    for i in 1 99 do if i 2 eq 1 then echo i fi done 我正在学习 bash 并且我正在尝试更好地理解第 3 行 为什么 i 2 必须用括号双层包裹 为什么我不能把 旁边的符号i like i 2
  • 包含存储在向量中的 auto_ptr 的类

    在回答中将具有 std auto ptr 作为其成员变量的类的对象存储在 std vector 中是否安全 我说过包含 auto ptr 的类可以存储在向量中假设该类有一个用户定义的复制构造函数 有一些评论表明情况并非如此 因此这个问题是试
  • 使用内联表单集创建模型和相关模型

    我已将其发布在Django 用户 谷歌网上论坛 also 使用中的示例内联表单集文档 我能够edit属于特定模型的对象 使用 模型 我一直在尝试遵循相同的模式creating使用内联表单集的新对象 但无法 我的头脑足够清醒 可以为此目的提出
  • Android gradle:buildtoolsVersion 与compileSdkVersion

    有什么区别buildtoolsVersion vs compileSdkVersion在 Android 项目的 build gradle 中 编辑 具体来说 我想澄清一下构建工具是什么 compileSdkVersion是您编译所针对的
  • 获取数字范围内的数字列表

    我有一个数据框 其中一列包含一个 或多个 数字范围 我想将其转换为基于给定范围的数字列表 输入示例 35 40 or 35 43 45 47 这应该产生 1 35 36 37 38 39 40 and 1 35 36 37 38 39 40
  • 无法实现 androidx.appcompat.appcompat:1.0.0

    我是 Android 开发的绝对初学者 并尝试构建测试自动化来测试移动应用程序 在设置 IntelliJ 数周后 我仍然面临问题 其中包括以下问题 由于我使用的是 SDK 版本 29 我被告知应该将所有 support 关键字转换为 and
  • C# 的单例模式 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我需要存储一堆需要全局访问的变量 我想知道单例模式是否适用 从我看到的例子来看 单例模式只是一个不能被继承的静态类 但我见过的例子对于我的需求来说过于复杂 最简单的单例类是什么 我不能创建
  • android - 让 onTouch 优先于 onClick

    我有一个允许用户在 3 个不同视图之间滑动的活动 每个视图都显示图像列表 这些图像具有调用新活动并使图像全屏显示的 onClick 事件 这一切都正常 但是如果我尝试在 3 个不同的视图之间滑动并且我的手指在图像上滑动 它将触发 onCli
  • JavaFX 3D 对象之间的并集、交集和差异

    有没有办法在 JavaFX 3D 对象之间执行布尔运算 例如并集 交集和差集 例如在 Sphere 实例 Cylinder 实例和 Box 实例之间 从 Shape 类继承的 JavaFX 2D 对象已经具有 union 和 minus 方
  • 从外部模块访问资源文件

    到目前为止 在非模块化 java 之前 您只需将文件放入src main java resources确保它在类路径中 然后加载它 file getClass getClassLoader getResourceAsStream myfil
  • 如何存储和搜索 IP 地址

    我有 4 个 IP 地址源 我想将它们存储在 SQL Server 中 并允许按来源国家 地区代码分类的范围按国家 地区在排除列表中创建 为此我有两张桌子 IP地址范围 国家代码 我需要知道的是 如果此数据返回到客户端然后缓存以供快速查询
  • 如何在后台状态下获取来电/去电事件

    在我的一个应用程序中 它具有我成功实现的播放声音的功能 即使当应用程序正在运行 前台状态 并且我们收到来电时 应用程序音乐也会停止并在呼叫断开时再次恢复 现在真正的问题就在这里 当应用程序进入后台状态时 我们不会收到任何来电 去电事件 在后
  • 改进 Retina iPad 上的缓慢画布动画 - KineticJS

    我正在使用 KineticJS 执行 HTML Canvas 动画 动画可以在所有桌面浏览器和非视网膜 iDevices 包括 iPad mini 上完美运行 但是 从视网膜设备 浏览器或使用 appcelerator 的应用内 Web 视
  • 这个打印样式表如何工作?

    我真的很喜欢如何http www honorshaven com 看起来是打印出来的 pdf 我浏览了源代码 试图弄清楚他们是如何做到的 我的导航总是在打印时变成丑陋的项目符号列表 我不知所措 有人知道吗 任何帮助都是极好的 谢谢 马丁 编
  • 获取所有模型类型

    如何获取属于模型一部分的实体类型列表 以便我可以测试模型是否确实适用于该实体类型 var dcx new MyDbContext var lst new List
  • 是否可以将 JavaVM * 和 JNIEnv * 保存为全局变量并在其他地方使用?

    JavaVM javaVM NULL JNIEnv jniEnv NULL createJavaVM javaVM 无效 jniEnv javaVMInitArgs 其中 javaVM 和 jniEnv 是全局变量 是否可以将JavaVM
  • Z3 Java API 文档

    我已经安装了Z3 API for Java我正在尝试使用它 但找不到任何解释如何使用此 API 的文档 到目前为止我找到的唯一资源是源代码和示例程序 所以我想知道是否有人知道任何其他文档Z3 Java API 目前 Java API 没有单
  • 使用 swing 组件在框架中打开文本文件

    我想使用 swing 组件打开框架中的文本文件 最好具有突出显示功能 我在第一帧中提交的文本中获取文本文件的名称 并想在第二帧中打开该文本文件 我的代码是 import javax swing import java awt import
  • Laravel 验证:必须是符合“json”规则的有效 JSON 字符串

    我正在制作 Laravel API 但我似乎无法在其中一篇文章中发送 JSON 数据 我检查了 StackOverflow 中的其他帖子 但似乎我的 JSON 请求是正确的 所以我似乎找不到错误 这是我的控制器方法中的代码 validato
  • 如何初始化参数化模板类的静态成员

    我不认为我的问题重复this one 我尝试做的事情 template