这个问题已经讨论了几次,但我发现的所有解决方案要么不起作用,要么基于boost的静态断言.我的问题很简单.我有一个类,我只想允许真正的类型(double和float).如果我尝试使用float或double以外的类型实例化类,我想要一个编译时错误.我正在使用Visual C++ 11.这是我尝试过的:
template <typename RealType>
class A
{
// Warning C4346
static_assert(std::is_same<RealType, double>::value || std::is_same<RealType, float>::value);
}
template <typename RealType>
class A
{
// Error C2062: type 'unknown' unexpected
static_assert(decltype(RealType) == double || decltype(RealType) == float);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?提前致谢!
这是超级基础但我无法在任何地方找到答案.有很多帖子在那里大约抛出和捕获,但实际发生的事情,如果我throw从function1,然后调用function1从function2,但不抓住它,这是否意味着它只是被重新抛出来的来电function2?从以下情况来看,我会说是的,但是在我开始并假设之前,我希望得到一个坚实的大师般的答案:
#include <iostream>
void function1()
{
throw 1;
}
void function2()
{
function1();
}
int main()
{
try
{
function2();
}
catch(...)
{
std::cout << "caught!";
return 0;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Output:
caught!
我通过构建,ninja然后ninja test从我的构建树运行来运行单元测试:
cmake -G Ninja /source/tree
ninja
ninja test
Run Code Online (Sandbox Code Playgroud)
但是,要运行valgrind,我需要手动运行它:
valgrind rel/path/to/test
Run Code Online (Sandbox Code Playgroud)
我想valgrind在跑步时自动跑步ninja test.根据cmake文档 "设置[valgrind测试] 非常容易 ",但是当我运行时
ctest -D NightlyMemoryCheck
Run Code Online (Sandbox Code Playgroud)
我刚收到这个错误:
Cannot find file: /home/arman/tinman/deb/DartConfiguration.tcl
Site:
Build name: (empty)
WARNING: No nightly start time found please set in CTestConfig.cmake or DartConfig.cmake
Problem initializing the dashboard.
Run Code Online (Sandbox Code Playgroud)
当我遵循此SO问题的说明时,我收到类似的错误:
如何让ctest用valgrind运行一个没有dart的程序?
我不知道是什么dart,但根据网站它是某种在线测试doodad.
对我来说,显然非常容易.有谁知道一个解决方案,使超级容易,你就必须是某种IT术士,使它的不是工作?
我的程序在该std::pow(double,int)函数中花费了90%的CPU时间.准确性不是这里的主要关注点,所以我想知道是否有更快的替代品.我想要尝试的一件事是铸造浮动,执行操作然后再加倍(尚未尝试过); 我担心这不是一种提高性能的可移植方式(不管大多数CPU本质上都是双重操作吗?)
干杯
我经常gq用来将更长的注释包装在一些字符内,如果我正在使用//或/* /*评论我的代码,它可以正常工作:
// here is a simple comment that exceeds my line width
// across multiple lines
// here is a simple comment that
// exceeds my line width across
// multiple lines
Run Code Online (Sandbox Code Playgroud)
但是,如果我有三次斜杠评论,例如对于doxygen,它不起作用:
/// here is a simple comment that exceeds my line width
/// across multiple lines
/// here is a simple comment that
// exceeds my line width / across
// multiple lines
Run Code Online (Sandbox Code Playgroud)
vim似乎包括最后一个斜杠作为文本的一部分,并没有认识到它构成了评论的一部分.我怎样才能解决这个问题?当我选择三次斜杠评论并按时,我想看到的包装结果gq: …
我知道如何使用std::unordered_map::emplace,但我该如何使用emplace_hint?cplusplus和cppreference都没有提供一组示例来说明我们如何知道放置元素的位置.
任何人都可以提供一些有关这方面的信息,或者提供一些示例/插图,告诉我们什么时候可以知道布置元素应该去哪里?
正如我从已发现此信息是允许用户定义的文本类型的参数类型,如下所示:
const char*
unsigned long long int
long double
char
wchar_t
char16_t
char32_t
const char*, std::size_t
const wchar_t*, std::size_t
const char16_t*, std::size_t
const char32_t*, std::size_t
Run Code Online (Sandbox Code Playgroud)
好吧,我在该列表中看到的唯一有符号整数是char,它太小了.如果我想做这样的事情怎么办?
str operator"" _i(int i) {
return i*2;
}
Run Code Online (Sandbox Code Playgroud)
然后,当我写作时,-1000_i我希望得到-2000.我该怎么做呢?
我试图在编译时确定是否调用了一个函数.具体来说,我想抛出静态断言失败,如果它是:
template <typename T>
auto Function(T value) -> std::enable_if<someCondition, int>
{
// this is the function I want to call
}
template <typename... T>
int Function(T...)
{
// This function should never be called, instead I want
// a compile-time failure if this is called, because it
// means the above function wasn't successfully resolved.
}
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是因为无法正确调用Function()正确的条件会导致数千行编译器错误消息,对于那些不熟悉代码库的人来说,这些消息都没有用.
我不希望把一个原因static_assert的Function,因为我们有很多的这些功能,我们有办法,而不是生成Catch-all通过宏,这避免了代码库的不必要的生长,同时产生更多的错误信息帮助版本.
可以这样做吗?
大师到处告诉我们const一切,除非我们需要对其进行修改,但标准使一切可变的,直到我们宣布它 const.
我在这里遗漏了什么,或者这是一个矛盾吗?const根据专家(其中一些人可能设计标准),默认情况下,为什么不是C++类型,默认情况下应该制作 const?
假设我有一个包含大量其他类声明的类.是否有可能以某种方式分散这些成本,以便嵌套类型的编译时内存消耗不会以二次方式增长?如果需要的话,我愿意在编译时受到打击,如果可以选择的话,我很乐意把它分成不同的翻译单元.
为了尝试找到解决方案,我编写了以下程序,该程序说明了导致这些井喷的代码类型的简化版本:
// Add T to the list of args of SeqWithArgs N number of times:
template <int N, typename T, typename SeqWithArgs>
struct Append;
template <int N, typename T, template <typename...> class Seq, typename... Args>
struct Append<N, T, Seq<Args...>>
{
using type = typename Append<N-1, T, Seq<Args..., T>>::type;
};
template <typename T, template<typename...> class Seq, typename... Args>
struct Append<0, T, Seq<Args...>>
{
using type = Seq<Args...>;
};
static constexpr const int N = 10;
// Tuple containing …Run Code Online (Sandbox Code Playgroud)