如何static_assert
在我的失败代码中进行此传递?我试过的所有排列const
周围T
,但我没能得到const int *
.编译器总是把它解释为int * const
.
template <class T>
union const_cast_impl {
using CT = const T;
static_assert(std::is_same<CT,const int *>::value, "CT is not const int*");
T data;
CT cdata;
const_cast_impl(CT ptr):cdata(ptr){}
operator T(){
return data;
}
};
int main(){
int a = 2;
const int *ptr = &a;
int *ptr2 = const_cast_impl<int *>(ptr);
}
Run Code Online (Sandbox Code Playgroud) 我使用 Barriers 在 Python3 中实现了这段代码。我想在 Python2.7 中获得相同的功能,但我不知道要使用哪个同步原语,因为 Python2.7 中不存在 Barriers
import threading
import time
from threading import Thread,Barrier
b = Barrier(2, timeout=50)
def func1():
time.sleep(3)
b.wait()
print('Working from func1')
return
def func2():
time.sleep(5)
b.wait()
print('Working from func2')
return
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
Run Code Online (Sandbox Code Playgroud) 我必须使用PERF_INSTRUMENT
库中的宏.PERF_INSTRUMENT
期望用户提供c样式字符串作为函数名称来打印此仪器点的位置.
但是,我不想每次使用时编写函数名称,PERF_INSTRUMENT
而是想要调用它,__func__
以便函数名称自动包含在perf日志中.
但是当我使用__func__
它时实际返回operator()
是因为__func__
它嵌入在lambda函数中.
他们可以通过哪种方式将main()
函数名称传递给PERF_INSTRUMENT
宏.
#include <cstdio>
#include <cassert>
#include <type_traits>
using namespace std;
namespace /* anonymous */
{
template< typename T >
struct Is_Const_Char_Array
: std::is_same< std::remove_reference_t< T >,
char const[ std::extent< std::remove_reference_t< T > >::value ] >
{};
template< typename T >
struct Is_C_String_Literal
: Is_Const_Char_Array< T >
{};
}
#define PERF_INSTRUMENT(name) auto instObj = [] { static_assert( Is_C_String_Literal< decltype( name …
Run Code Online (Sandbox Code Playgroud) c++ template-meta-programming c-preprocessor preprocessor-meta-program c++11