如何确定类型是否来自模板类?特别是,我需要确定模板参数是否std::basic_ostream具有基类.通常std::is_base_of是工作的工具.但是,std::is_base_of仅适用于完整类型而非类模板.
我正在寻找这样的东西.
template< typename T >
bool is_based_in_basic_ostream( T&& t )
{
if( std::is_base_of< std::basic_ostream< /*anything*/>, T >::value )
{
return true;
}
else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我敢肯定这可以做到我想不出怎么做.
我的应用程序可能会受益于在本土解决方案中使用boost的信号库之一.
应用程序是多线程的,但执行信号处理的部分是单线程的.
如果多线程不是问题,有没有理由比Boost.Signal更喜欢Boost.Signals2?
我正在学习c ++ 11中的新功能并遇到了这个问题.我想通过在lambda中移动它作为for_each的参数来捕获unique_ptr.
建立:
std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int); (*p) = 3;
Run Code Online (Sandbox Code Playgroud)
尝试1 - 不起作用,因为unique_ptr没有复制构造函数.c ++ 0x没有指定移动语法.
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
Run Code Online (Sandbox Code Playgroud)
尝试2 - 使用bind将p的移动副本绑定到一个带有int&的函数:
std::for_each(arr.begin(), arr.end(),
std::bind([](const unique_ptr<int>& p, int& i){
i += (*p);
}, std::move(p))
);
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说 'result' : symbol is neither a class template nor a function template.
这个练习的主要目的是了解如何在lambda中捕获可移动变量,该lambda被缓存以供以后使用.
我最近被一个微妙的bug咬了.
char ** int2str = {
"zero", // 0
"one", // 1
"two" // 2
"three",// 3
nullptr };
assert( int2str[1] == std::string("one") ); // passes
assert( int2str[2] == std::string("two") ); // fails
Run Code Online (Sandbox Code Playgroud)
如果你有神圣的代码审查权力,你会注意到我忘记了,后"two".
经过相当大的努力找到这个bug我必须问为什么有人会想要这种行为?
我可以看到这对宏魔术有什么用处,但是为什么这是像python这样的现代语言中的"特征"?
您是否曾在生产代码中使用字符串文字串联?
这很简单,我很尴尬地问,但是如何在D2中将交流字符串转换为广告字符串?
我有两个用例.
string convert( const(char)* c_str );
string convert( const(char)* c_str, size_t length );
Run Code Online (Sandbox Code Playgroud) 我正在研究脚本语言嵌入到应用程序中.
我一直认为Lua是最好的选择,但我已经阅读了一些关于嵌入V8的新闻,并且正在考虑使用它.
我的问题有两个:
有嵌入v8(或任何javascript引擎)经验的人是否推荐它?
它与嵌入Lua相比如何?
我喜欢v8有一个c ++嵌入API.然而,Lua API有很多时间需要改进(较新的并不总是更好,所有这些).
注意:我不关心哪种语言/库更好或者性能更好.我只是询问嵌入的简易性.
我有一个关于静态和非静态函数和变量的问题.
1)非静态函数访问静态变量.
没关系!
class Bar
{
public:
static int i;
void nonStaticFunction() {
Bar::i = 10;
}
};
int Bar::i=0;
Run Code Online (Sandbox Code Playgroud)
2)非静态函数访问非静态变量
绝对可以!
3)静态函数访问静态变量和函数
绝对可以!
4)静态功能访问非静态功能
没关系
class Bar
{
public:
static void staticFunction( const Bar & bar)
{
bar.memberFunction();
}
void memberFunction() const
{
}
}
Run Code Online (Sandbox Code Playgroud)
5)静态函数访问非静态变量
好还是不行?我对此感到困惑!
这个例子怎么样?
class Bar
{
public:
static void staticFunction( Bar & bar)
{
bar.memberFunction();
}
void memberFunction()
{
i = 0;
}
int i;
};
Run Code Online (Sandbox Code Playgroud) 使用在线词典工具并没有多大帮助.我认为封装的方式在计算机科学中的使用并不完全符合它在简单英语中的含义.
计算机科学版本的反义词是什么?更具体地说,什么是封装的反义词,它将作为函数名称使用.
我为什么要在乎?这是我的动机:
// A class with a private member variable;
class Private
{
public:
// Test will be able to access Private's private members;
class Test;
private:
int i;
}
// Make Test exactly like Private
class Private::Test : public Private
{
public:
// Make Private's copy of i available publicly in Test
using Private::i;
};
// A convenience function to quickly break encapsulation on a class to be tested.
// I don't have good name for …Run Code Online (Sandbox Code Playgroud) 我的问题听起来像是一个矛盾,但我不知道如何引用新的文字语法而不是user-defined-literal.
std::string operator "" s ( const char* str, size_t len )
{
return std::string( str, len );
}
assert( "foo"s == "bar"s );
Run Code Online (Sandbox Code Playgroud)
我记得听说用户定义的文字应该以_前缀开头.这意味着图书馆为我们定义了一些非前缀文字.
标准是否在标准库中提供了一些UDL?
如果是的话,他们是什么?
我想知道是否可以在boost :: bind调用中使用传递给可变参数模板的参数数量作为占位符.
像这样的东西:
template <typename ... Args>
boost::bind(&function, this, anArg, _1)); //If Args count equals 1
boost::bind(&function, this, anArg, _1, _2)); //If Args count equals 2
boost::bind(&function, this, anArg, _1, _2, _3)); //If Args count equals 3
Run Code Online (Sandbox Code Playgroud)
这可能吗?
谢谢
c++ ×8
c++11 ×3
boost ×2
d ×2
templates ×2
bind ×1
c ×1
javascript ×1
lambda ×1
lua ×1
oop ×1
python ×1
scripting ×1
terminology ×1
type-traits ×1
unit-testing ×1