是否可以覆盖(隐藏)非虚方法,但仍然可以从子类中显式调用它?它可以工作,但我不知道它是特定于编译器还是应该因某种原因而避免.(我没想到它会根据"隐藏"功能的术语而起作用.)
class A
{
public:
void foo()
{
cout << "A::foo()" << endl;
}
};
class B : public A
{
public:
void foo()
{
cout << "B::foo()" << endl;
A::foo();
}
};
int main()
{
B b;
b.foo();
}
Run Code Online (Sandbox Code Playgroud)
这可能会更多地关注这个问题.
父的非虚方法在我们无法改变的基础设施库中,但是我们需要派生一个隐藏的类(不是"覆盖",正如我现在所学到的)一个支持增强它的功能(和在途中明确地调用父元素.也就是说,派生类需要使用这个"扩充"函数来代替父类.这是隐藏父函数的有效方案吗?
我职业生涯的大部分时间都在使用 Perforce,并且仍在习惯 git,所以我想我要么没有意识到我的场景与以下帖子中的场景不匹配,要么我错过了一些隐式步骤对于普通 git 用户来说是显而易见的,但对我来说却不是。
\n似乎每当我精挑细选时,我最终都会得到一个没有任何更改的分支(不过这是有道理的,因为它们已经致力于掌握,对吗?\xe2\x80\x94那么我如何创建这个“主题分支”我看到有人提到了?)现在我运行了几个我不完全理解的命令(例如git remote add ...
),并且还可能将原作者的存储库与我的分叉存储库互换,所以它变得很难说是否因为我弄乱了我的环境而无法正常工作。
@Omer 的回答效果很好。然后我做了一个
\ngit reset --hard HEAD\n
Run Code Online (Sandbox Code Playgroud)\n清理。原作者合并了 PR,我同步到它:
\ngit remote add upstream git://github.com/<author>/<repo>.git\ngit pull upstream master\n
Run Code Online (Sandbox Code Playgroud)\n 为什么每次运行此代码时都会得到不同的输出(Ideone):
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
const char* _user = "FOO";
const char* _password = "BAR";
char login[21];
sprintf(login,
"\x15\x00\x01%-8s%-10s",
_user,
_password);
for (int i = 0; i < 21; i++) {
printf(" %02x", login[i] & 0xff);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但不是这个代码(Ideone):
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
const char* _user = "FOO";
const char* _password = "BAR";
const char* _session = "ABCDEFGHIJ";
int _expectedSeq = …
Run Code Online (Sandbox Code Playgroud) 如何将变量与字符串组合并生成值
<?php
$bun1="home";
$x="1";
$h= "$"."bun".$x;
echo $h;
?>
Run Code Online (Sandbox Code Playgroud)
我想打印$ bun1与结果回家,但$ bun1中的"1"是变量$ x
我在理解验证库时遇到了一些麻烦io.vavr.control.Validation
.有可能提出过于宽泛的问题,我确实有几个子问题 - 但我相信它们是密切相关的,并且会拼凑起来帮助我理解使用这种验证机制的正确方法.
我从这里的例子开始:https://softwaremill.com/javaslang-data-validation.
Validation<String, ValidRegistrationRequest> validate(RegistrationRequest request) {
return combine(
validateCardId(request.getCardId()),
validateTicketType(request.getTicketType()),
validateGuestId(request.getGuestId())
)
.ap(ValidRegistrationRequest::new)
.mapError(this::errorsAsJson);
}
private Validation<String, Card> validateCardId(String cardId) {
// validate cardId
// if correct then return an instance of entity the cardId corresponds to
}
private Validation<String, TicketType> validateTicketType(String ticketType) {
// validate ticketType
// if known then return enumeration representing the ticket
}
private Validation<String, Guest> validateGuest(String guestId) {
// validate guestId
// if correct then return …
Run Code Online (Sandbox Code Playgroud) foo.thenCompose(fooResponse -> {
...
return bar.thenCompose(barResponse -> {
...
});
}).exceptionally(e -> {
...
});
Run Code Online (Sandbox Code Playgroud)
这也会.exceptionally()
捕获从嵌套bar.thenCompose
lambda 内部抛出的异常吗?或者我需要这样写:
foo.thenCompose(fooResponse -> {
...
return bar.thenCompose(barResponse -> {
...
}).exceptionally(nestedE -> {
...
});
}).exceptionally(e -> {
...
});
Run Code Online (Sandbox Code Playgroud)
然后又吐了?
我不一定要这样做,但我很好奇.在C/C++是有办法来定义串的终止子等比空终止?例如,是否可以写这个,
char* str = "123456|ABCDEF";
char* foo = str;
char* bar = strstr(str, "|") + 1;
// do something here to define '|' as a terminator
std::cout << foo << std::endl;
std::cout << bar << std::endl;
// undo pipe-as-terminator definition
Run Code Online (Sandbox Code Playgroud)
得到输出,
123456
ABCDEF
Run Code Online (Sandbox Code Playgroud)
?
如果不能,那么有没有任何办法让指针到缓冲区的部分,不分配/复印内存,无需修改缓冲区,即覆盖|
s到\0
S'
我开始学习Java了,在我的程序中它出现了
Stack<Integer> s = new Stack<Integer>();
Run Code Online (Sandbox Code Playgroud)
和
Stack<Integer> s = new Stack<>();
Run Code Online (Sandbox Code Playgroud)
和
Stack<Integer> s = new Stack();
Run Code Online (Sandbox Code Playgroud)
所有编译并产生我期望的输出.
有什么实际区别吗?哪个更受欢迎?
我正在学习CompletableFuture
s.
我不是在问和之间的区别thenApply()
thenCompose()
.相反,我想问一下感觉不对的代码"气味",以及实际可能证明它的理由.
从CompletableFuture
我到目前为止看到的用法来看,似乎你从来没有这样:
CompletableFuture<String> foo = getSomething().thenApply((result) -> { ... });
Run Code Online (Sandbox Code Playgroud)
这不是:
String foo = getSomething().thenCompose((result) -> { ... });
Run Code Online (Sandbox Code Playgroud)
要返回未来,您必须使用thenCompose()
,否则thenApply()
.
然而,从经验来看,语言并没有设法消除每次都做出这种明确的选择,这似乎很奇怪.例如,是否有一个单一的方法,thenDo()
其返回类型是从return
lambda中推断出来的(在编译期间)?它可能然后被给予thenApply
或thenCompose
在编译时般的性能以及.
但我确信有一个很好的理由采用不同的方法,所以我想知道原因.
是因为在Java中从lambda推断返回类型是危险还是不可能?(我也是Java的新手.)
是不是因为有一种情况,单个方法确实不明确,唯一的解决方案是使用单独的方法?(我想象可能,嵌套CompletableFuture
或复杂的界面和泛型.)如果是这样,有人可以提供一个明确的例子吗?
是出于其他原因还是有记录的推荐?
什么是惯用的,最小的(也许是功能性的)方式来说Optional<String>
和说,
true
如果为null或空,或query_str = <str>
否则.当然,这是我笨重的尝试:
Optional<String> queryMaybe; // Given.
String clause = "true";
if (queryMaybe.isPresent() && !queryMaybe.get().isEmpty()) {
clause = "query_str = " + queryMaybe.get();
}
Run Code Online (Sandbox Code Playgroud)
但是我的同事们编写的周围代码似乎使用了很多,我认为可能被称为"功能"样式链接.例如,
String externalTraffickedStateClauses = StringUtils.defaultIfBlank(
externalTraffickedStateQueries.stream().collect(Collectors.joining(" OR ")), "false");
Run Code Online (Sandbox Code Playgroud)
和
SORTORDERBY orderBy = orderByMaybe.orElse(DEFAULT_ORDER_BY);
Run Code Online (Sandbox Code Playgroud)
所以,我想,以符合自己的风格,就像我能,即链stream
,filter
,orElse
等不知道这是因为我从C++背景的还是因为我的学习收获是已经过时,但是这仍然是很对我不熟悉
java ×5
c++ ×3
generics ×2
c ×1
coding-style ×1
currying ×1
debugging ×1
exception ×1
future ×1
git ×1
git-fork ×1
hex ×1
java-8 ×1
lambda ×1
optional ×1
overriding ×1
performance ×1
php ×1
printf ×1
pull-request ×1
string ×1
syntax ×1
validation ×1
vavr ×1