我想知道是否有一种轻松,直接的方式来计算C++循环,例如for和基于C++的并行循环.你会如何实现这样的事情?从Scala我知道map,filter和foreach函数也许也可以执行这些并行操作?有没有一种简单的方法可以在C++中实现这一点.我的主要平台是Linux,但如果它可以跨平台工作则会很好.
我目前正在学习一点点哈斯克尔并开始弄清楚monad是如何工作的.由于我正常编写C++代码,我认为monad模式(就像我现在理解的那样)在C++中也非常棒,例如对于期货等,
我想知道是否有一种方法可以实现一个接口或一个基类来强制执行函数的正确重载bind和return(对于C++的返回而不是返回C++的原因)派生类型?
为了更清楚我在想什么:
考虑我们有以下非成员函数:
auto foo(const int x) const -> std::string;
Run Code Online (Sandbox Code Playgroud)
和一个成员函数bar,它对不同的类有不同的重载:
auto bar() const -> const *Monad<int>;
Run Code Online (Sandbox Code Playgroud)
如果我们现在想做这样的事情:foo(someMember.bar())这根本不起作用.因此,如果必须知道哪个bar返回,例如,如果它返回a future<int>,我们必须调用bar().get(),哪些块,即使我们不需要在这里阻止.
在haskell我们可以做类似的事情 bar >>= foo
所以我问自己是否可以在C++中实现这样的行为,因为在调用时foo(x)我们不关心x是否是一个盒子的对象int,以及盒子里的类int,我们只想foo在盒装类型上应用函数.
对不起,我有一些问题用英语表达我的想法,因为我不是母语人士.
我std::regex在我的项目中工作.由于我在编译时知道正则表达式,并且构建正则表达式是在O(2 ^ m)中,其中m是正则表达式的长度,我希望在编译时建立正则表达式.这可能与std :: regex一起吗?(我不这么认为,因为我没有看到任何constexpr ctor basic_regex)如果没有,那么有一个正则表达式库可以在编译时构建我的正则表达式
我目前仍然坚持使用boost spirit x3解析的规则.对于我要解析的内容,这是te EBNF(使用精神列表中的%运算符):
type ::= class_type | lambda_type
lambda_type ::= more_arg_lambda | one_arg_lambda
more_arg_lambda ::= "(", type%",", ")", "=>", type
one_arg_lambda ::= type, "=>", type <- here is the left recursion
class_type ::= identifier%"::", ["<", type%",", ">"]
Run Code Online (Sandbox Code Playgroud)
usng boost spirit x3,我试图解析下面的struct/variant:
typedef x3::variant<
nil,
x3::forward_ast<LambdaType>,
x3::forward_ast<ClassType>
> Type;
struct LambdaType {
std::vector<Type> parameters_;
Type return_type_;
};
struct ClassType{
std::vector<std::string> name_;
std::vector<Type> template_args_;
};
Run Code Online (Sandbox Code Playgroud)
我有一个关于我目前在这里尝试的实例,它不起作用,我也尝试改变变体解析器的顺序,它没有帮助,我得到无尽的回忆,或者没有我期望(或希望)的行为.任何人都可以帮我调试这个解析器吗?我想我在解析器中有一些类型的左递归,是否有机会避免这种情况,或者没有机会重写语法?这个gramar甚至可以用boost spirit x3解析吗?
编辑:
我设法在这个语法中消除了左递归.现在te语法如下:
type ::= class_type | lambda_type
lambda_type ::= more_arg_lambda | …Run Code Online (Sandbox Code Playgroud) 我有兴趣为C++实现类似Java集合的环境.我知道这不是一个好主意等等,但我不想在以后使用它,但只是学习如何做一些先进的OOP.
我的问题是我想要一个collection<T>纯虚函数的基类模板.其中一个功能应该是map()a std::function<R(T)>.既然map()应该是虚拟的,我不知道我应该使用哪种返回类型.collection<R>因为成员函数模板不能是虚拟的,所以是不可能的.
如何map()为collection<T>界面添加此类成员函数?
在C++ 17 std::optional中引入,我对这个决定感到高兴,直到我查看了参考文献.我知道Optional/ Maybe来自Scala,Haskell和Java 8,其中可选的是monad并遵循monadic法则.在C++ 17实现中不是这种情况.我应该如何使用std::optional,没有像/ map和flatMap/ 那样的函数bind使用std::optionalvs例如返回的优势-1,或者nullptr如果它无法计算结果,则来自函数?对我来说更重要的是,为什么没有std::optional设计成monad,有原因吗?
我刚开始看看go以及go的工作原理.我只是想知道你是否可以在C++中实现相同的东西并找到boost.fiber.goroutines和boost纤维有什么区别?你能用C++中的那些光纤实现goroutine吗?
我想知道是否有办法以编程方式确定 C++ 中正在运行的程序的堆栈大小。如果是这样,是否还有一种方法可以以编程方式确定程序在运行时使用了多少堆内存?为了确定堆的大小,我可以通过重载new和delete运算符,但我认为这不适用于智能指针。
我试图通过以下方式实现它:
int main(){
const char STACK_BEGIN = 'A';
//a lot of code
register unsigned long int STACK_NOW asm("%esp");
long long int stack_size = (reinterpret_cast<int>(&STACK_BEGIN) - STACK_NOW);
//rest of code
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试删除蓝色发光边框,当窗格聚焦在我的javaFX应用程序中的tabpane中的选项卡时,该边框会出现.关于如何在CSS中执行此操作的任何想法?
这是我目前的css:
.tab{
-fx-background-radius: 0;
-fx-background-color: derive(-fx-base, 0%);
-fx-background-insets: 0.3;
-fx-focus-color: XXXXXX;
}
.tab:hover{
-fx-background-color: derive(-fx-base, 20%);
}
.tab:selected{
-fx-background-color: derive(-fx-base, 60%);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道哪个值我应该给焦点颜色匹配背景derive(-fx-base, 60%)我可以看到差异,如果我设置它-fx-background-color我得到一个错误
我正在尝试用boost.spirit.qi编写一些解析器,但是当我编译时,我得到以下不推荐的警告:
In file included from /usr/include/boost/iostreams/detail/is_dereferenceable.hpp:12:0 ...
#pragma message: NOTE: Use of this header (bool_trait_def.hpp) is deprecated
#pragma message: NOTE: Use of this header (template_arity_spec.hpp) is deprecated
Run Code Online (Sandbox Code Playgroud)
我使用错误的解析器还是旧的?我怎样才能摆脱这些警告?
编辑:我/usr/include/boost/iostreams/detail/is_dereferenceable.hpp正在以某种方式包括/usr/include/boost/spirit/include/qi.hpp
使用Boost版本1.61