71得票2回答
如何正确地将编译时信息传递给Template Haskell函数?

我需要将编译脚本中的一些信息传递到Template Haskell中。目前,编译脚本将信息存储在系统环境中,因此我只需使用runIO包装的System.Environment.getEnvironment来读取它。是否有更好的方法,例如传递一些参数给ghc(类似于C预处理器的-D...),或者...

64得票10回答
使用std::map<K,V>时,如果V没有可用的默认构造函数

我有一个作为std :: map实现的符号表。对于值,没有办法通过默认构造函数合法地构造值类型的实例。但是,如果我不提供默认构造函数,我会得到编译器错误,如果我使构造函数断言,我的程序就可以成功编译,但如果我尝试使用它添加新成员,它就会在map :: operator[]内部崩溃。有没有办法让...

57得票4回答
确定函数返回类型的最简单方法

考虑一个非常简单但冗长的函数,例如:int foo(int a, int b, int c, int d) { return 1; } // using ReturnTypeOfFoo = ??? 如何在编译时最简单、最简洁地确定函数的返回类型(在此示例中为int,名称为Return...

45得票8回答
在编译时确定函数参数个数

我有一个C库(包含C头文件),存在两个不同的版本。 其中一个版本有一个函数,看起来像这样:int test(char * a, char * b, char * c, bool d, int e); 另一个版本看起来像这样:int test(char * a, char * b, char *...

44得票3回答
我能否以constexpr的方式获取C++类型名称?

我希望在编译时使用类型名称。例如,假设我已经写了以下代码: constexpr size_t my_strlen(const char* s) { const char* cp = s; while(*cp != '\0') { cp++; }; ...

42得票6回答
如何使用C++模板来缩短编译时间

我正在将我的C++应用程序的一部分从旧的C类型数组更改为模板化的C++容器类。详见这个问题。虽然解决方案运行得非常好,但对模板代码进行微小更改会导致大量重新编译,并且会极大地减慢构建时间。有没有办法将模板代码从头文件中移出并放回到cpp文件中,使得实现细节的微小变化不会导致重建?

40得票3回答
编译时算法初始化std::array

考虑:static constexpr unsigned num_points{ 7810 }; std::array&lt; double, num_points &gt; axis; for (int i = 0; i &lt; num_points; ++i) { axis[i...

40得票3回答
std::less是否允许在编译时比较不相关的指针?

考虑以下代码: #include &lt;functional&gt; #include &lt;typeinfo&gt; template &lt;typename T&gt; inline constexpr const void *foo = &amp;typeid(T); int...

39得票4回答
在编译时如何切换/选择类型?

在c++11中,是否有一种标准方法可以让我在无符号索引上进行编译时类型选择? 例如: using type_0 = static_switch&lt;0, T, U&gt;; // yields type T using type_1 = static_switch&lt;1, T, U...

39得票5回答
C++11中是否支持is_constexpr?

在C++11中,是否有可能根据一个表达式是否为常量表达式(即constexpr),生成编译时布尔值?一些stackoverflow上的问题涉及到这个问题,但我没有看到直接的答案。