Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在编辑标头时处理编译时间

在编辑标头时处理编译时间
EN

Stack Overflow用户
提问于 2014-06-10 12:18:23
回答 1查看 153关注 0票数 2

我正在做一个巨大的项目,它使用一个系统,当运行make时,生成一些头文件,其中包含一些常量,这些常量在代码中随处可见。由于该项目的规模,如果其中一个头文件被更改(删除一个常量或添加另一个常量),几乎整个项目都必须重新编译(有时需要几个小时)。

我最初的解决方案是编写某种类型的ConstantManager类,该类具有每个代码-值对的映射,以及一个getter方法,它将给定的代码作为字符串返回其值来返回(相当直接),并更改头生成器,以便它将常量定义为#define,扩展为ConstantManager的实例并调用getter。这样做的问题是它不能与switch语句一起工作(好吧……case语句),因为返回值不是常量表达式。

我的问题是:这个问题有没有替代的解决方案,或者让我的交换机工作的技巧?

EN

回答 1

Stack Overflow用户

发布于 2014-06-10 13:27:08

您可以将大标题拆分为较小的标题,并包括这些标题。这可能是大量的初始工作,但这是最直接的,并且可能与您当前的解决方案兼容。

另一种选择是创建,以使您的ConstManager类具有常量表达式成员。为此,您不需要太多,但您不能使用map。

ConstManager.h

代码语言:javascript
运行
AI代码解释
复制
namespace ConstManager {

  namespace detail {
    struct Constant {
      char const * const name;
      char const * const value;
    };


    Constant const * const constants;
    unsigned int total_variables;
  }

  inline char const * const ConstManager::get(char const * needle) constexpr {
    using namespace ConstManager::detail;
    /* i was not able to quickly find a constexpr compatible binary search function*/
    if(int i = 0;  i < total_variables; ++i){
      Constant & const c = constants[i];
      if(strcmp(c.name, needle) == 0){
        return c.value;
      }
    }
    return nullptr;
  }
}

应生成ConstManager.c

代码语言:javascript
运行
AI代码解释
复制
ConstManager::detail::Constant ConstManager::detail::constants [] = {
  {"first var", "first value"},
  {"second var", "second value"}
};

unsigned int ConstManager::detail::total_variables = 2;

建议的第一个解决方案(这是在第一次编辑之前):

我认为你应该用常规的外部变量来代替你所有的定义。

尽管有两点需要注意:

  1. 如果这些定义用于连接字符串,它将不起作用
  2. 它可能会使内联变得更加困难,如果不是不可能的话,但如果这很重要,只有探查器可以判断。

constmgr.h

代码语言:javascript
运行
AI代码解释
复制
  // make all your needed constansts externs
  namespace Constants {
    extern int const theFirstConstant;
    extern char const * const someStringConstant;
  }

然后在构建时生成源文件。

constexpr.cpp

代码语言:javascript
运行
AI代码解释
复制
 int const Constants::theFirstConstant = 1000;
 char const * const Constants::someStringConstant = "hihihoho";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24140792

复制
相关文章
python 调用Google Tran
调用Google 翻译API进行翻译 #!/usr/bin/python #coding: UTF-8 import sys reload(sys) sys.setdefaultencoding('utf8') from xml.etree import ElementTree as ET #引入解析xml文件的模块 import re import urllib,urllib2 #引入接入网络接口API的模块 from socket import error as SocketE
py3study
2020/01/09
1.1K0
博客上如何设置最佳 Google Adsense 广告投放位置
前面我总结了个人的 Google Adsense 投放经验,其中说到最重要的是位置, Google的建议是:博客一般分成两种页面,主页(列表页),日志页,所以可以分别对两种位置就行针对性摆放:
Denis
2023/04/14
9740
博客上如何设置最佳 Google Adsense 广告投放位置
Python3调用Google翻译
想弄一个批量翻译的东西,奈何百度翻译别人根本不研究,所以只能看谷歌翻译的了;这份代码的作者写的太聪明了,是真的很棒,思路很好,看到这样的代码简直年轻10岁
Elapse
2020/08/17
1.5K1
Google Python风格规范(上)
好的代码风格,给人舒服的感觉,今天介绍一下谷歌的Python风格规范,由于规范比较多,将分为两次介绍。
王强
2018/08/09
7090
怎样用Google APIs和Google的应用系统进行集成(3)—-调用Google 发现(Discovery)API的RESTful服务
说了这么多,那么首先同意我以Google Discovery RESTful服务为例,给大家演示怎样用最普通的Java代码调用Google Discovery RESTful服务。
全栈程序员站长
2022/07/12
9490
google code 上源码的下载方法
SVN全称是Subversion,是Apache的一个子项目 ,具体能够到SVN中文站(http://www.subversion.org.cn/)去了解下。Google Code是Google的一个开放源码计划,当中包含源码托管,即提供一个server来保存、共享和管理源码。每一个人都能够创建自己的Project,至于空间的大小,请看下图:
全栈程序员站长
2022/07/09
9650
google code 上源码的下载方法
如何屏蔽博客园中的Google广告
博客园中每篇文章的评论窗口最下面就带了一个Google的广告,当然我这个博客也不例外。不过这些广告我看着就不爽,于是就想办法把该死的广告去掉。使用Mathon2打开博客园中的任何一篇文章,选定Google广告和周围区域,右键“查看选定区域代码”就可以看到原来是Google的JS文件在我的页面中生成了一个Iframe,具体代码为:
深蓝studyzy
2022/06/15
7530
如何用 Google Colab 练 Python?
自动配置、有效求助、协作编程、版本控制。一站式解决 Python 新手练习中的痛点
王树义
2019/03/08
1.9K0
如何将你的Hexo博客部署到Google Firebase上
博主最近在 白嫖万恶的资本 将博客部署到新的CDN上,所以在寻找免费的静态Web应用部署工具,发现了Google Firebase。
pai233
2022/04/26
1.5K0
如何将你的Hexo博客部署到Google Firebase上
google colab上如何下载bert相关模型
https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip
西西嘛呦
2021/03/22
2.4K0
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.3K0
Google 的 Firebase 如何删除项目
如何关闭google的安全搜索
我们平常使用google搜索,默认是已启用安全搜索的。例如在google搜索“1”,右上角会出现“已启用安全搜索”。 进入google帮助找到安全搜索内容https://support.google.com/websearch/answer/510 屏蔽 Google 上的色情内容 您可以使用安全搜索设置来滤除 Google 上包含露骨内容的搜索结果(例如色情内容)。安全搜索并非 100% 准确,但它能帮您屏蔽掉大多数成人内容。 您可将安全搜索用作一种家长控制方式,以使孩子远离您手机
小歪
2018/04/04
9.2K0
如何关闭google的安全搜索
Google S2 中的 CellID 是如何生成的 ?
笔者在《高效的多维空间点索引算法 — Geohash 和 Google S2》文章中详细的分析了 Google S2 的算法实现思想。文章发出来以后,一部分读者对它的实现产生了好奇。本文算是对上篇文章的补充,将从代码实现的角度来看看 Google S2 的算法具体实现。建议先读完上篇文章里面的算法思想,再看本篇的代码实现会更好理解一些。
一缕殇流化隐半边冰霜
2018/08/30
1.8K0
Google S2 中的 CellID 是如何生成的 ?
Google Colab上的YOLOv3 PyTorch
对于计算机视觉爱好者来说,YOLO(一次只看一次)是一种非常流行的实时对象检测概念,因为它的速度非常快并且性能出色。
代码医生工作室
2020/04/14
2.7K0
Google Colab上的YOLOv3 PyTorch
Openlayers中Google地图的加载
在实现的时候,参考了mygisforum的文章http://blog.csdn.net/mygisforum/article/details/7582449的内容,同时结合gwc的gridset,实现了google切片在Openlayers2中的调用与展示。
牛老师讲GIS
2018/10/23
2K0
Openlayers中Google地图的加载
Google Colab上安装TensorRT
NVIDIA TensorRT是一个高性能深度学习推理平台。它包括深度学习推理优化器和运行时,可为深度学习推理应用程序提供低延迟和高吞吐量。推理时,基于TensorRT的应用程序比仅CPU平台的执行速度快40倍。使用TensorRT,您可以优化所有主流框架中训练出的神经网络模型。
云水木石
2019/07/02
2.4K0
Google Colab上安装TensorRT
点击加载更多

相似问题

复制NSMenuItems最简单的方法是什么?

13

复制列的最简单方法是什么?

10

使用jQuery调整导航菜单大小的最简单方法

31

制作这个垂直菜单最简单的方法是什么?

30

为Android按钮添加箭头的最简单方法是什么

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档