小编bla*_*ost的帖子

在模板函数的特定实例化上使C++失败编译

我正在开发一个具有模板功能的项目:

template <class T> 
T foo<T>(T val) { return someFunc(val); }

template <>
bool foo<bool>(bool val) { return otherFunc(val); };
Run Code Online (Sandbox Code Playgroud)

现在,我有一个课程Bar,我不想接受它作为输入.实际上,我希望它能够生成一个容易发现的编译错误.问题是,如果我这样做:

template <>
Bar foo<Bar>(Bar val) { static_assert(false,"uh oh..."); }
Run Code Online (Sandbox Code Playgroud)

它在每次编译时都失败了.我找到了/sf/answers/274879811/,它说我需要引用模板类型,否则静态断言总会发生.问题是我这里没有模板类型.如果我做:

template< typename T >
struct always_false { 
    enum { value = false };  
};

template <>
Bar foo<Bar>(Bar val) { static_assert(always_false<Bar>::value,"uh oh..."); }
Run Code Online (Sandbox Code Playgroud)

那么它也总是无法编译.有没有办法确保带有类型的模板实例化Bar总是会导致编译错误?

c++ templates template-specialization c++11

7
推荐指数
1
解决办法
1723
查看次数

Linux内核抢占级别

我想知道PREEMPT_NONE和PREEMPT_VOLUNTARY之间的区别是什么.根据文件,

This option reduces the latency of the kernel by adding more
"explicit preemption points" to the kernel code
Run Code Online (Sandbox Code Playgroud)

但它没有提到这些要点.我试着谷歌搜索它,但我没有找到比上面的文字更多的细节(这似乎令人惊讶,因为我认为这将是一个常见的问题).我主要担心的是其他进程挨饿的过程,所以我想知道是否在使用VOLUNTARY的定时器中断上发生抢占.当然,信息越多越好,所以我想知道其他预设点可能是什么.

linux linux-kernel

5
推荐指数
1
解决办法
1139
查看次数

考虑目标重制而不运行任何规则的 Makefile

我正在回答另一个问题 ——SO 上的多作业生成的依赖关系排序错误,我发布了以下生成文件。OP 回复说,如果-j没有在命令行中指定,它就不会构建dir1/out/file.bar目标......很困惑,我确认它可以-j2-j1. 我已经看过了,我没有看到我错过了什么。我想我会把它贴在这里以防有人知道,因为我很好奇......

$(shell mkdir dir1 >& /dev/null; touch dir1/file.foo; \
        mkdir dir2 >& /dev/null; touch dir2/file.foo)


OUTDIRS = dir1/out dir2/out
OUTPUTS = dir1/out/file.bar dir2/out/file.bar

.DEFAULT_GOAL := all

$(OUTPUTS) : | $(OUTDIRS)

$(OUTDIRS) :
        @echo "making $@"
        sleep 1
        mkdir -p $@
        @echo "done making $@"


%.bar : ../%.foo
        @echo "copying $< to $@"
        @cp $< $@

all : outputs
        @echo "done $@"

outputs : $(OUTPUTS)
        @echo …
Run Code Online (Sandbox Code Playgroud)

makefile

5
推荐指数
0
解决办法
566
查看次数