我正在研究自C++ 17以来可用的类模板推导.以下是我想问的代码:
#include <iostream>
#include <cmath>
using std::endl;
using std::cout;
template<typename T>
struct MyAbs {
template<typename U>
MyAbs(U&& u) : t(std::forward<T>(u))
{ cout << "template" << endl;}
#ifdef ON
MyAbs(const T& t) : t(t) {}
#endif
T operator()() const
{
return std::abs(t);
}
T t;
};
/*
// may need the following
template<typename U>
MyAbs(U&&) -> MyAbs<typename std::remove_reference<U>::type>;
*/
int main()
{
const double d = 3.14;
cout << MyAbs(4.7)() << endl;
cout << MyAbs(d)() << endl;
return 0;
} …Run Code Online (Sandbox Code Playgroud) 如果 i 是偶数则 bar 调用 bar(i/2),否则调用 bar(3*i + 1),则递归函数 bar 将进行尾递归。
const int bar(const int i)
{
if (i < 2) return i;
return i % 2 ? bar(i/2) : bar(3*i + 1);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果 bar 调用 bar 或 foo,而后者具有与 bar 完全不同的局部变量集,该怎么办?
const int bar(const int i)
{
if (i < 2) return i;
return i % 2 ? bar(i/2) : foo(3*i + 1);
// where foo is very complicated recursive call that has
// 11 different user-defined/primitive type of …Run Code Online (Sandbox Code Playgroud) 我知道针对基本相同的错误发布了多个问题。但是,我不认为它们与我的问题相同。
简而言之,我正在尝试编译 oci-java-sdk 附带的示例之一。它无法编译。看起来像一个 jar 文件左右有 LOG 变量,所以我想知道在哪里可以找到该 jar 文件。
详细信息如下。首先,我使用 Oracle Linux,并使用 RPM 安装了 oci-java-sdk。接下来,我将整个示例目录复制到我的主目录。我的 CLASSPATH 如下所示:
$ echo $CLASSPATH
:/usr/lib64/java-oci-sdk/lib/oci-java-sdk-full-1.6.1.jar:/usr/lib64/java-oci-sdk/third-party/lib/*
Run Code Online (Sandbox Code Playgroud)
根据我工作的需要,我尝试构建如下示例:
$ javac -Xlint -cp $CLASSPATH:$PWD/lombok.jar:/usr/share/java/*:/usr/share/java/slf4j/* ./EventsServiceExample.java
Run Code Online (Sandbox Code Playgroud)
如上所示,我是lombok.jar从lombok项目网站下载的。命令javac失败如下:
$ javac -Xlint -cp $CLASSPATH:$PWD/lombok.jar:/usr/share/java/*:/usr/share/java/slf4j/* ./EventsServiceExample.java
./EventsServiceExample.java:83: error: cannot find symbol
LOG.info("Number of rules in compartment {} is {}", compartmentId, rulesList.size());
^
symbol: variable LOG
location: class EventsServiceExample
./EventsServiceExample.java:135: error: cannot find symbol
LOG.info(
^
symbol: variable LOG
location: class EventsServiceExample
./EventsServiceExample.java:143: error: cannot find symbol …Run Code Online (Sandbox Code Playgroud) 简而言之,在函数模板内,Foo被 调用的main,采用通用引用并使用假定为 的局部变量的字段Foo,似乎main当 的字段时使用了输入参数的(对 的局部变量的引用)字段Foo提到了“据说是局部变量”。
我的英语水平不太好,无法先用一小段话来总结我的问题。让我首先介绍一些背景。
我有一个类故意错误地实现了所有五个构造函数:
class X {
public:
X(const std::string& s) : s_(s) {
std::cout << "X(const std::string&)" << std::endl;
}
X() {
std::cout << "X()" << std::endl;
}
X(const X& x) : s_{"copy_con_val"} {
std::cout << "X(const X&)" << std::endl;
}
X(X&& x) : s_{"move_con_val"} {
std::cout << "X(X&&)" << std::endl;
}
X& operator=(const X& x) {
s_ = "copy_assign_val";
std::cout << "X& operator=(const X&)" << …Run Code Online (Sandbox Code Playgroud)