我在类中找到了这行代码,我必须修改它:
::Configuration * tmpCo = m_configurationDB;//pointer to current db
Run Code Online (Sandbox Code Playgroud)
而且我不知道究竟是什么意思是双重冒号前面的类名.没有它我会读:声明tmpCo作为指向类的对象的指针Configuration...但前面的双冒号混淆了我.
我还发现:
typedef ::config::set ConfigSet;
Run Code Online (Sandbox Code Playgroud) 在我的代码中,我有:
class A:
def a():
......
def b():
a()
......
b()
Run Code Online (Sandbox Code Playgroud)
然后编译器会说"NameError:未定义全局名称a()".如果我从A类中提取所有东西,那就不会有问题,但是如何在A类中定义方法呢?非常感谢你.
在阅读Bruce Eckel关于命名空间的"Thinking in C++"时,我遇到了以下声明:
但是,您几乎从未在头文件中看到using指令(至少不在范围之外).原因是using指令消除了对该特定命名空间的保护,并且效果持续到当前编译单元结束.如果在头文件中放置using指令(在作用域之外),则意味着在包含此头文件的任何文件中都会发生"名称空间保护"丢失,这通常意味着其他头文件.
您是否愿意用一些简单的例子来帮助我理解上述陈述?
考虑以下(错误)C++代码:
#include <cmath>
#include <cstdlib>
#include <iostream>
int main() {
if (abs(-0.75) != 0.75) {
std::cout << "Math is broken!\n";
return 1;
} else {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码是错误的,因为它调用abs(含义::abs)而不是std::abs.取决于实现,::abs可能不存在,或者它可能是C abs,或者它可能是包含版本的重载集double,如std::absis.
在Linux上使用Clang,至少在我的环境中,它被证明是第二种选择:C abs.这引发了两个警告,即使没有明确启用任何警告:
<source>:7:9: warning: using integer absolute value function 'abs' when argument is of floating point type [-Wabsolute-value]
if (abs(-0.75) != 0.75) {
^
<source>:7:9: note: use function 'std::abs' instead
if (abs(-0.75) != 0.75) { …Run Code Online (Sandbox Code Playgroud) 我知道如何编写 Meteor包,但我似乎无法弄清楚如何让所有导出都落在我的应用程序的命名空间中,如本演示文稿中所述.
这个特定的包特定于我正在构建的应用程序,它只导出一个可以被视为应用程序单例的装饰器的方法.我试过api.export('MyApp.myMethod')但是这给了一个错误native: Bad exported symbol: MyApp.myMethod.
如果我只是api.export('myMethod'),那么在我必须调用的应用程序代码中myMethod(),这不是命名空间.
Meteor是否有类似Node的机制var http = require('http');?或者如何将包导出到给定的命名空间?
javascript namespace-organisation global-namespace javascript-namespaces meteor
我目前正处于一个使用Prototype库的大型站点项目,并且已经有大量的Javascript代码.
我们现在正在处理一段代码,这些代码将被"注入"其他人的网站(图片人们在他们的网站中添加了一个<script>标签),然后运行我们的代码并向他们添加一堆DOM元素和功能.现场.这将有新的代码片段,并且还将重用我们在主站点上使用的许多代码.
我遇到的问题是,在人们的页面中添加一个包含Prototype的<script>当然不是很酷.如果我们在已经使用任何框架的页面中执行此操作,我们将保证将所有内容都搞砸.
jQuery为我们提供了"重命名"$对象的选项,因此它可以很好地处理这种情况,除了显然我们没有使用jQuery,所以我们必须迁移所有内容.
现在我正在考虑一些丑陋的选择,我不确定什么是最好的......
我想知道你们认为我能做些什么,以及是否有一些可以解决我所有问题的魔术选择......
例如,你认为我可以使用像Caja/Cajita这样的东西来沙箱我自己的代码并将它与网站的其他部分隔离开来,并且在那里有Prototype吗?或者我完全忽略了这一点?
我还读过一次关于bookmarklet的技术,你是否添加了这样的代码:
(function() { /* your code */ })();
Run Code Online (Sandbox Code Playgroud)
然后你的代码都在你的匿名函数中,而你根本没有触及全局命名空间.你认为我可以制作一个包含以下内容的文件:
(function() {
/* Full Code of the Prototype file here */
/* All my code that will run in the "other" site */
InitializeStuff_CreateDOMElements_AttachEventHandlers();
})();
Run Code Online (Sandbox Code Playgroud)
那会有用吗?例如,它是否会实现不整合全局命名空间的目标,而不是杀死使用jQuery的站点上的功能?
或者Prototype过于复杂,以某种方式孤立它?
(注意:我想我知道这会在任何地方创建闭包,而且速度较慢,但我不太关心性能,我的代码没有做任何复杂的事情)
诸如启用std类型输出之类的示例解释了如何使用ADL来“注入”某个函数/运算符,具体取决于 fn/op 应用到的类型。
我想知道 ADL 是否完全适用于全局命名空间,也就是说,using在全局命名空间范围内声明(或通过 提供)的类型是否使 ADL在全局命名空间中寻找匹配的函数?
具体来说,这些是等价的。ADL?:
// 1 - at global namespace scope
struct GlobalType {};
template< class Ch, class Tr>
std::basic_ostream<Ch, Tr>& operator<<(std::basic_ostream<Ch, Tr>& os, GlobalType const& x)
{
os << ...;
return os;
}
// 2 - within namespace
namespace ecaps {
struct EcapsType {};
template< class Ch, class Tr>
std::basic_ostream<Ch, Tr>& operator<<(std::basic_ostream<Ch, Tr>& os, EcapsType const& x)
{
os << ...; …Run Code Online (Sandbox Code Playgroud) c++ namespaces using global-namespace argument-dependent-lookup
所以我知道C Compatability Headers中的任何标题:
在全局命名空间中放置相应的cxxx头将放置在
std命名空间中的每个名称
我也知道这些C头文件在c ++ 17中已被弃用,赞成它们的兼容性"cxxx"对应物.
现在,我相信它size_t仅由标准定义标题定义.所以我认为这在技术上意味着size_t全局命名空间中的定义已被弃用?
我已经使用它多年了,size_t而且在转向使用之前我只是想确认一下std::size_t.
我可以在 Doxygen 生成的文档的命名空间列表中显示全局命名空间吗?我有一些函数extern "C",它们出现在声明它们的头文件的文档中,但不在命名空间列表中,给人的印象是它们并不真正存在......
我的要求可能看起来像是糟糕的做法,但是我想知道它是否可行.
我正在使用作曲家自动加载我的课程.在其中一个类文件中,我想定义一个可以在全局命名空间中用作速记的函数.由于作曲家的要求,该类需要被命名空间.
我的问题:有什么方法可以通过微小的改动来实现这个目的吗?
<?php
namespace Jodes;
class MyClass {
public function __construct() {
echo "I am the class";
}
}
function fn(){
echo "I am a shorthand for doing stuff";
}
Run Code Online (Sandbox Code Playgroud)
<?php
require_once '../vendor/autoload.php';
use Jodes\MyClass;
new MyClass();
// Jodes\fn(); // works
// fn(); // doesn't work
Run Code Online (Sandbox Code Playgroud)
{
"name": "jodes/mypackage",
"autoload": {
"psr-4" : {
"Jodes\\" : "src"
}
}
}
Run Code Online (Sandbox Code Playgroud)
尽管阅读了比我能算的更多的链接,但我已经尝试了所有我能想到的运气.
谢谢
global-namespace ×10
c++ ×6
namespaces ×5
javascript ×2
composer-php ×1
doxygen ×1
function ×1
gcc ×1
meteor ×1
nameerror ×1
php ×1
prototypejs ×1
python ×1
size-t ×1
syntax ×1
types ×1
using ×1